Поделиться через


Как привязаться к перечислению (WPF .NET)

В этом примере показано, как выполнить привязку к перечислению. К сожалению, нет прямого способа использования перечисления в качестве источника привязки данных. Enum.GetValues(Type) Однако метод возвращает коллекцию значений. Эти значения можно упаковать в ObjectDataProvider источник данных и использовать в качестве источника данных.

Тип ObjectDataProvider предоставляет удобный способ создания объекта в XAML и его использования в качестве источника данных.

Важно!

Документация по рабочему столу для .NET 7 и .NET 6 находится в стадии разработки.

Ссылка на перечисление

ObjectDataProvider Используйте тип для упаковки массива значений перечисления, предоставляемых самим типом перечисления.

  1. Создайте новый 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))
    
  2. ObjectDataProvider Ссылка на ресурс. В следующем XAML перечислены значения перечисления в элементе ListBox управления:

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

Полный КОД XAML

Следующий код XAML представляет простое окно, которое выполняет следующие действия:

  1. Упаковывает перечисление HorizontalAlignment в источник данных в ObjectDataProvider качестве ресурса.
  2. ListBox Предоставляет элемент управления для перечисления всех значений перечисления.
  3. Привязывает 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>

См. также