Vytvoření vazby k výčtu (WPF .NET)

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. Enum.GetValues(Type) Metoda však vrátí kolekci hodnot. Tyto hodnoty lze zabalit do ObjectDataProvider zdroje dat a použít je jako zdroj dat.

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

Důležité

Dokumentace k desktopové příručce pro .NET 7 a .NET 6 se právě připravuje.

Odkazování na výčet

ObjectDataProvider Tento typ slouží k zabalení pole hodnot výčtu zadaných samotným typem výčtu.

  1. Vytvořte nový ObjectDataProvider jako prostředek XAML, a to buď v aplikaci XAML, nebo XAML objektu, se kterým pracujete. Tento příklad používá okno a vytvoří ObjectDataProvider s klíčem EnumDataSourceprostředku .

    <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á tři vlastnosti k načtení výčtu:

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

    XAML efektivně rozděluje volání metody, název metody, parametry a návratový typ. Nakonfigurovaná ObjectDataProvider 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 ObjectDataProvider prostředek. Následující XAML uvádí hodnoty výčtu v ovládacím ListBox prvku:

    <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í HorizontalAlignment výčet do ObjectDataProvider zdroje dat jako prostředek.
  2. ListBox Poskytuje ovládací prvek pro výpis všech hodnot výčtu.
  3. Button Vytvoří vazbu vlastnosti ovládacího prvku HorizontalAlignment na vybranou položku v objektu 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é