Как привязаться к перечислению (WPF .NET)
В этом примере показано, как выполнить привязку к перечислению. К сожалению, нет прямого способа использования перечисления в качестве источника привязки данных. Enum.GetValues(Type) Однако метод возвращает коллекцию значений. Эти значения можно упаковать в ObjectDataProvider источник данных и использовать в качестве источника данных.
Тип ObjectDataProvider предоставляет удобный способ создания объекта в XAML и его использования в качестве источника данных.
Важно!
Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.
Ссылка на перечисление
ObjectDataProvider Используйте тип для упаковки массива значений перечисления, предоставляемых самим типом перечисления.
Создайте новый
ObjectDataProvider
ресурс XAML в приложении XAML или XAML объекта, с которым вы работаете. В этом примере используется окно и создаетсяObjectDataProvider
ключEnumDataSource
ресурса.<Window.Resources> <ObjectDataProvider x:Key="EnumDataSource" ObjectType="{x:Type sys:Enum}" MethodName="GetValues"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="HorizontalAlignment" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources>
В этом примере
ObjectDataProvider
для получения перечисления используется три свойства:Свойство Description ObjectType
Тип объекта, возвращаемого поставщиком данных. В этом примере — System.Enum. Пространство sys:
имен XAML сопоставляется сSystem
.MethodName
Имя метода, выполняемого в типе System.Enum
. В этом примере — Enum.GetValues.MethodParameters
Коллекция значений, предоставляемых методу MethodName
. В этом примере метод принимаетSystem.Type
перечисление.Фактически XAML разбивает вызов метода, имя метода, параметры и тип возвращаемого значения. Настроенный
ObjectDataProvider
в предыдущем примере эквивалентен следующему коду:var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
ObjectDataProvider
Ссылка на ресурс. В следующем XAML перечислены значения перечисления в элементе ListBox управления:<ListBox Name="myComboBox" SelectedIndex="0" ItemsSource="{Binding Source={StaticResource EnumDataSource}}"/>
Полный КОД XAML
Следующий код XAML представляет простое окно, которое выполняет следующие действия:
- Упаковывает перечисление HorizontalAlignment в источник данных в ObjectDataProvider качестве ресурса.
- ListBox Предоставляет элемент управления для перечисления всех значений перечисления.
- Привязывает Button свойство элемента управления HorizontalAlignment к выбранному элементу в элементе
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>
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по