So binden Sie an eine Aufzählung

In diesem Beispiel wird gezeigt, wie an eine Enumeration gebunden wird. Leider gibt es keine direkte Möglichkeit, eine Enumeration als Datenbindungsquelle 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 Enumeration

Verwenden Sie den ObjectDataProvider-Typ, um ein Array von Aufzählungswerten umzuschließen, die vom Enumerationstyp selbst bereitgestellt werden. Mit den folgenden Schritten wird eine HorizontalAlignment-Aufzählung eingehüllt. Sie können bei Bedarf eine andere Aufzählung ersetzen.

  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 Typ des Objekts, das vom Datenanbieter zurückgegeben werden soll. In diesem Beispiel System.Enum. Der sys: XAML-Namespace wird System zugeordnet.
    MethodName Der Name der Methode, die auf dem System.Enum Typ ausgeführt werden soll. In diesem Beispiel Enum.GetValues.
    MethodParameters Eine Sammlung von Werten, die der MethodName-Methode zur Verfügung gestellt werden sollen. In diesem Beispiel übernimmt die Methode die System.Type-Aufzählung.

    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, das folgende Aufgaben übernimmt:

  1. Umschließt die HorizontalAlignment-Aufzählung in einer ObjectDataProvider-Datenquelle als Ressource.
  2. Stellt ein ListBox-Steuerelement bereit, um alle Enumerationswerte auflisten zu können.
  3. Bindet die Eigenschaft eines Button Steuerelements HorizontalAlignment 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