Chia sẻ

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}}”

Xem thêm  [WPF] Hướng dẫn Bind đến một thuộc tính của một UI Element trong wpf

-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.

ĐĂNG KÝ MUA HÀNG

    Email (*)

    Điện thoại (*)

    Tên sản phẩm/Dịch vụ:


    Chia sẻ

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *