Binden an eine Enumeration (WPF .NET)

In diesem Beispiel wird die Bindung an eine Enumeration veranschaulicht. 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 eine ObjectDataProvider und als Datenquelle umgebrochen werden.

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

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Verweisen auf die Enumeration

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

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

    <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:

    Eigenschaft Beschreibung
    ObjectType Der Typ des Objekts, das vom Datenanbieter zurückgegeben werden soll. In diesem Beispiel ist dies 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 ist dies 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.

    Tatsächlich unterbricht der XAML-Code einen Methodenaufruf, einen Methodennamen, Parameter und den Rückgabetyp. Das ObjectDataProvider im vorherigen Beispiel konfigurierte Beispiel 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 ObjectDataProvider Ressource. Im folgenden XAML werden die Aufzählungswerte in einem ListBox Steuerelement aufgelistet:

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

Full XAML

Der folgende XAML-Code stellt ein einfaches Fenster dar, das folgende Aufgaben übernimmt:

  1. Umbruch der HorizontalAlignment Enumeration 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>

Weitere Informationen