Freigeben über


Verknüpfung mit einer Aufzählung (WPF .NET)

In diesem Beispiel wird gezeigt, wie an eine Enumeration gebunden wird. Leider gibt es keine direkte Möglichkeit, eine Enumeration als Datenquelle zu verwenden. Die Enum.GetValues(Type)-Methode gibt jedoch eine Auflistung von Werten zurück. Diese Werte können in einem ObjectDataProvider eingefasst und als Datenquelle verwendet werden.

Der ObjectDataProvider Typ bietet eine bequeme Möglichkeit, ein Objekt in XAML zu erstellen und als Datenquelle zu verwenden.

Verweisen auf die Aufzählung

Verwenden Sie den ObjectDataProvider Typ, um ein Array von Enumerationswerten umzuschließen, die vom Enumerationstyp selbst bereitgestellt werden.

  1. Erstellen Sie eine neue ObjectDataProvider als XAML-Ressource, entweder in der XAML Ihrer Anwendung oder im XAML des Objekts, mit dem Sie arbeiten. In diesem Beispiel wird ein Fenster verwendet, und ObjectDataProvider wird mit einem Ressourcenschlüssel von EnumDataSourceerstellt.

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

    In diesem Beispiel verwendet die ObjectDataProvider drei Eigenschaften zum Abrufen der Enumeration:

    Eigentum Beschreibung
    ObjectType Der Objekttyp, der vom Datenanbieter zurückgegeben werden soll. In diesem Beispiel System.Enum. Der sys: XAML-Namespace ist Systemzugeordnet.
    MethodName Der Name der Methode, die für den System.Enum Typ ausgeführt werden soll. In diesem Beispiel Enum.GetValues.
    MethodParameters Eine Auflistung von Werten, die für die MethodName-Methode bereitgestellt werden sollen. In diesem Beispiel verwendet die Methode die System.Type der Enumeration.

    Im Wesentlichen gliedert XAML einen Methodenaufruf, den Methodennamen, die Parameter und den Rückgabetyp auf. Die ObjectDataProvider, die im vorherigen Beispiel konfiguriert wurde, entspricht dem folgenden Code:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Verweisen Sie auf die Ressource ObjectDataProvider. Der folgende XAML-Code listet die Enumerationswerte in einem ListBox control auf.

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

Vollständiger XAML-Code

Der folgende XAML-Code stellt ein einfaches Fenster dar, in dem Folgendes ausgeführt wird:

  1. Umschließt die HorizontalAlignment-Aufzählung in einer ObjectDataProvider-Datenquelle als Ressource.
  2. Stellt ein ListBox Steuerelement bereit, um alle Enumerationswerte aufzulisten.
  3. Bindet die HorizontalAlignment Eigenschaft eines Button Steuerelements an das ausgewählte Element im 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>

Siehe auch