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.
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 aObjectDataProvider
com uma chave de recurso deEnumDataSource
.<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 paraSystem
.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 oSystem.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))
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:
- Encapsula a HorizontalAlignment enumeração em uma ObjectDataProvider fonte de dados como um recurso.
- Fornece um ListBox controle para listar todos os valores de enumeração.
- 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
.NET Desktop feedback