Nội dung
Giới thiệu
Bạn cần bind một System.Windows.Controls.ItemsControl đến các giá trị của một Enum trong WPF. Trong bài này csharpcanban.com sẽ hướng dẫn cách Bind to Enum trong WPF.
Giải pháp: Sử dụng class System.Windows.Data.ObjectDataProvider để dùng các giá trị của Enum như 1 binding source. Sau đó bind ObjectDataProvider đến thuộc tính ItemsSource của ItemsControl.
Giải thích: bạn có thể tạo ObjectDataProvider trong mã XAML như 1 resource của window, sau đó đưa các giá trị của 1 Enum vào objectdataprovider này bằng cách sử dụng phương thức GetValues của class Enum. Đối số của phương thức là kiểu enum bạn đã tạo hoặc có sẵn trong thư viện của .NET. Sau khi đã có được nguồn dữ liệu trong ObjectDataProvider, bạn cho một ItemsControl nào đó (như listbox, combobox,…) binding đến nguồn này.
Xây dựng ứng dụng
Bước 1. Tạo một ứng dụng WPF mới.
Bước 2. Chỉnh sửa đoạn mã XAML như dưới đây:
<Window x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib" Title="Window1" Height="300" Width="400"> <Window.Resources> <ObjectDataProvider x:Key="AlignmentValues" ObjectType="{x:Type sys:Enum}" MethodName="GetValues"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="HorizontalAlignment" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> <Border Margin="10" BorderBrush="SkyBlue" BorderThickness="3" Padding="8" CornerRadius="4"> <StackPanel Width="300"> <TextBlock>Chọn kiểu HorizontalAlignment của button:</TextBlock> <ListBox Name="listbox1" SelectedIndex="0" Margin="8" ItemsSource="{Binding Source={StaticResource AlignmentValues}}" /> <Button Width="100" Height="30" HorizontalAlignment="{Binding ElementName=listbox1, Path=SelectedItem}">Horizontal Button</Button> </StackPanel> </Border> </Window>
Chú giải cho code XAML trên:
-xmlns:sys="clr-namespace:System;assembly=mscorlib": import namespace System vào trong XAML. Vì namespace System chứa class Enum. -<ObjectDataProvider x:Key="AlignmentValues" ObjectType="{x:Type sys:Enum}" MethodName="GetValues">: tạo 1 objectdataprovider có tên là AlignmentValues, sử dụng đến phương thức GetValues của class System.Enum (System.Enum.GetValues(...))
Do phương thức GetValues cần một đối số, nên ta khai báo 1 enum nguồn để nó lấy dữ liệu, ở đây ta dùng đến enum HorizontalAlignment (với các giá trị: HorizontalAlignment.Left, Center, Right, Stretch).
<ObjectDataProvider.MethodParameters> <x:Type TypeName="HorizontalAlignment" /> </ObjectDataProvider.MethodParameters>
-Ta binding thuộc tính ItemsSource của lixtbox1 đến objectdataprovider AlignmentValues: ItemsSource=”{Binding Source={StaticResource AlignmentValues}}”
-Sau cùng, ta binding thuộc tính HorizontalAlignment của button đến thuộc tính SelectedItem của listbox1.
Kết quả:
[WPF] Hướng dẫn cách Bind to Enum trong WPF
Kết luận
Như vậy, trên đây csharpcanban.com đã Hướng dẫn cách Bind to Enum trong WPF. Thực sự là quá đơn giản đúng không các bạn. Hãy thực hành và vận dụng vào phần mềm của các bạn. Nếu gặp khó khăn khi Bind to Enum trong WPF hãy đặt câu hỏi trong phần bình luận ở dưới đây. Csharpcanban.com sẽ hướng dẫn các bạn chi tiết nhất.
Chúc các bạn thành công.