Como associar a uma enumeração (WPF .NET)

Este exemplo mostra como associar a uma enumeração. Infelizmente, não há uma maneira direta de usar uma enumeração como uma fonte de associação de dados. No entanto, o Enum.GetValues(Type) método retorna uma coleção de valores. Esses valores podem ser encapsulados em um ObjectDataProvider e usados como uma fonte de dados.

O ObjectDataProvider tipo fornece uma maneira conveniente de criar um objeto em XAML e usá-lo como uma fonte de dados.

Fazer referência à enumeração

Use o ObjectDataProvider tipo para encapsular uma matriz de valores de enumeração fornecidos pelo próprio tipo de enumeração.

  1. Crie um novo ObjectDataProvider como um recurso XAML, no XAML do aplicativo ou no XAML do objeto com o qual você está trabalhando. Este exemplo usa uma janela e cria a ObjectDataProvider com uma chave de recurso de 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>
    

    Neste exemplo, o ObjectDataProvider usa três propriedades para recuperar a enumeração:

    Propriedade Descrição
    ObjectType O tipo de objeto a ser retornado pelo provedor de dados. Neste exemplo, System.Enum. O sys: namespace XAML é mapeado para System.
    MethodName O nome do método a ser executado no System.Enum tipo. Neste exemplo, Enum.GetValues.
    MethodParameters Uma coleção de valores a serem fornecidos ao MethodName método. Neste exemplo, o método usa o System.Type da enumeração.

    Efetivamente, o XAML está dividindo uma chamada de método, o nome do método, os parâmetros e o tipo de retorno. O ObjectDataProvider configurado no exemplo anterior é o equivalente ao seguinte código:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Faça referência ao ObjectDataProvider recurso. O XAML a seguir lista os valores de enumeração em um ListBox controle:

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

XAML completo

O código XAML a seguir representa uma janela simples que faz o seguinte:

  1. Encapsula a HorizontalAlignment enumeração em uma ObjectDataProvider fonte de dados como um recurso.
  2. Fornece um ListBox controle para listar todos os valores de enumeração.
  3. Associa a propriedade de HorizontalAlignment um Button controle ao item selecionado no 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>

Confira também