Sdílet prostřednictvím


Vytvoření vazby k výčtu

Tento příklad ukazuje, jak vytvořit vazbu na výčet. Bohužel neexistuje přímý způsob použití výčtu jako zdroje datových vazeb. Metoda Enum.GetValues(Type) však vrátí kolekci hodnot. Tyto hodnoty lze zabalit do ObjectDataProvider a použít jako zdroj dat.

Typ ObjectDataProvider poskytuje pohodlný způsob, jak vytvořit objekt v XAML a použít ho jako zdroj dat.

Odkaz na výčet

Pomocí typu ObjectDataProvider zabalte pole hodnot výčtu zadaných samotným typem výčtu. Následující kroky uzavřou HorizontalAlignment výčet. V případě potřeby můžete nahradit jiný výčet.

  1. Vytvořte nový ObjectDataProvider jako prostředek XAML, buď v XAML vaší aplikace, nebo v XAML objektu, se kterým pracujete. Tento příklad používá okno a vytvoří objekt ObjectDataProvider pomocí klíče prostředku 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>
    

    V tomto příkladu ObjectDataProvider používá k načtení výčtu tři vlastnosti:

    Vlastnictví Popis
    ObjectType Typ objektu, který má být vrácen poskytovatelem dat. V tomto příkladu System.Enum. Obor názvů sys: XAML je mapován na System.
    MethodName Název metody, která se má spustit pro typ System.Enum. V tomto příkladu Enum.GetValues.
    MethodParameters Kolekce hodnot, které se mají poskytnout MethodName metodě. V tomto příkladu metoda přebírá System.Type výčtu.

    XAML efektivně rozděluje volání metody, název metody, parametry a návratový typ. ObjectDataProvider nakonfigurovaná v předchozím příkladu je ekvivalentem následujícího kódu:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Odkaz na zdroj ObjectDataProvider. Následující kód XAML uvádí hodnoty výčtu v ovládacím prvku ListBox:

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

Úplný KÓD XAML

Následující kód XAML představuje jednoduché okno, které provede následující kroky:

  1. Zabalí výčet HorizontalAlignment ve zdroji dat ObjectDataProvider jako zdroj.
  2. Poskytuje ovládací prvek ListBox pro výpis všech hodnot výčtu.
  3. Spojuje vlastnost Button ovládacího prvku HorizontalAlignment s vybranou položkou v 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>

Viz také