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.
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, undObjectDataProvider
wird 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:Eigentum Beschreibung ObjectType
Der Objekttyp, der vom Datenanbieter zurückgegeben werden soll. In diesem Beispiel System.Enum. Der sys:
XAML-Namespace istSystem
zugeordnet.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 dieSystem.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))
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:
- Umschließt die HorizontalAlignment-Aufzählung in einer ObjectDataProvider-Datenquelle als Ressource.
- Stellt ein ListBox Steuerelement bereit, um alle Enumerationswerte aufzulisten.
- 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
- Übersicht über Datenbindung
- Übersicht über Bindungsquellen
- StaticResource-Markuperweiterung
- Eine alternative Methode zum Binden an eine Enumeration
.NET Desktop feedback