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.
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 undObjectDataProvider
mit einem Ressourcenschlüssel vonEnumDataSource
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 wirdSystem
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 dieSystem.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))
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:
- Umbruch der HorizontalAlignment Enumeration in einer ObjectDataProvider Datenquelle als Ressource.
- Stellt ein ListBox Steuerelement bereit, um alle Enumerationswerte auflisten zu können.
- 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
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Feedback senden und anzeigen für