Bagikan melalui


Cara mengikat enumerasi (WPF .NET)

Contoh ini menunjukkan cara mengikat enumerasi. Sayangnya tidak ada cara langsung untuk menggunakan enumerasi sebagai sumber pengikatan data. Namun, metode mengembalikan Enum.GetValues(Type) kumpulan nilai. Nilai-nilai ini dapat dibungkus dalam ObjectDataProvider dan digunakan sebagai sumber data.

Jenis ini ObjectDataProvider menyediakan cara mudah untuk membuat objek di XAML dan menggunakannya sebagai sumber data.

Mereferensikan enumerasi

ObjectDataProvider Gunakan jenis untuk membungkus array nilai enumerasi yang disediakan oleh jenis enumerasi itu sendiri.

  1. Buat baru ObjectDataProvider sebagai sumber daya XAML, baik di aplikasi Anda XAML atau XAML objek yang sedang Anda kerjakan. Contoh ini menggunakan jendela dan membuat ObjectDataProvider dengan kunci sumber daya .EnumDataSource

    <Window.Resources>
        <ObjectDataProvider x:Key="EnumDataSource"
                            ObjectType="{x:Type sys:Enum}"
                            MethodName="GetValues">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="HorizontalAlignment" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    

    Dalam contoh ini, ObjectDataProvider menggunakan tiga properti untuk mengambil enumerasi:

    Properti Deskripsi
    ObjectType Jenis objek yang akan dikembalikan oleh penyedia data. Pada contoh ini, System.Enum. Namespace sys: XAML dipetakan ke System.
    MethodName Nama metode yang akan dijalankan pada System.Enum jenis . Pada contoh ini, Enum.GetValues.
    MethodParameters Kumpulan nilai yang akan diberikan ke MethodName metode . Dalam contoh ini, metode mengambil System.Type enumerasi.

    Secara efektif, XAML memecah panggilan metode, nama metode, parameter, dan jenis pengembalian. Yang ObjectDataProvider dikonfigurasi dalam contoh sebelumnya setara dengan kode berikut:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Referensikan ObjectDataProvider sumber daya. XAML berikut mencantumkan nilai enumerasi dalam ListBox kontrol:

    <ListBox Name="myComboBox" SelectedIndex="0"
             ItemsSource="{Binding Source={StaticResource EnumDataSource}}"/>
    

XAML Penuh

Kode XAML berikut mewakili jendela sederhana yang melakukan hal berikut:

  1. Membungkus HorizontalAlignment enumerasi dalam ObjectDataProvider sumber data sebagai sumber daya.
  2. Menyediakan kontrol untuk mencantumkan ListBox semua nilai enumerasi.
  3. Mengikat Button properti kontrol HorizontalAlignment ke item yang dipilih di ListBox.
<Window x:Class="ArticleExample.BindEnumFull"
        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" 
        SizeToContent="WidthAndHeight"
        Title="Enum binding">
    <Window.Resources>
        <ObjectDataProvider x:Key="EnumDataSource"
                            ObjectType="{x:Type sys:Enum}"
                            MethodName="GetValues">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="HorizontalAlignment" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    
    <StackPanel Width="300" Margin="10">
        <TextBlock>Choose the HorizontalAlignment value of the Button:</TextBlock>

        <ListBox Name="myComboBox" SelectedIndex="0"
                 ItemsSource="{Binding Source={StaticResource EnumDataSource}}"/>

        <Button Content="I'm a button"
                HorizontalAlignment="{Binding ElementName=myComboBox, Path=SelectedItem}" />
    </StackPanel>
</Window>

Lihat juga