Dela via


Så här kopplar du till en uppräkning

Det här exemplet visar hur du binder till en uppräkning. Tyvärr finns det inte ett direkt sätt att använda en uppräkning som en databindningskälla. Metoden Enum.GetValues(Type) returnerar dock en samling värden. Dessa värden kan omslutas i en ObjectDataProvider och användas som en datakälla.

Den ObjectDataProvider typen är ett bekvämt sätt att skapa ett objekt i XAML och använda det som datakälla.

Hänvisa till uppräkningen

Använd ObjectDataProvider-typen för att omsluta en matris med uppräkningsvärden som tillhandahålls av uppräkningstypen. Följande steg omsluter en HorizontalAlignment uppräkning. Du kan ersätta en annan uppräkning om du vill.

  1. Skapa en ny ObjectDataProvider som en XAML-resurs, antingen i ditt program XAML eller XAML för objektet du arbetar med. Det här exemplet använder ett fönster och skapar ObjectDataProvider med en resursnyckel för 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>
    

    I det här exemplet använder ObjectDataProvider tre egenskaper för att hämta uppräkningen:

    Fastighet Beskrivning
    ObjectType Den typ av objekt som ska returneras av dataprovidern. I det här exemplet . System.Enum XAML-namnområdet sys: mappas till System.
    MethodName Namnet på den metod som ska köras på den System.Enum typen. I det här exemplet . Enum.GetValues
    MethodParameters En samling värden som ska anges för metoden MethodName. I det här exemplet tar metoden uppräkningens System.Type.

    I praktiken delar XAML upp ett metodanrop, metodnamn, parametrar och returtyp. Den ObjectDataProvider som konfigurerades i föregående exempel motsvarar följande kod:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Referera till resursen ObjectDataProvider. Följande XAML visar uppräkningsvärdena i en ListBox kontroll:

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

Fullständig XAML

Följande XAML-kod representerar ett enkelt fönster som gör följande:

  1. Omsluter uppräkningen HorizontalAlignment som en resurs i en datakälla ObjectDataProvider.
  2. Ger en ListBox kontroll för att visa alla uppräkningsvärden.
  3. Binder en Button kontrolls egenskap HorizontalAlignment till det markerade objektet i 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>

Se även