Cómo enlazar a una enumeración (WPF .NET)
En este ejemplo se muestra cómo enlazar a una enumeración. Desafortunadamente, no hay una manera directa de usar una enumeración como origen de enlace de datos. Sin embargo, el método Enum.GetValues(Type) devuelve una colección de valores. Estos valores se pueden encapsular en ObjectDataProvider y usarse como origen de datos.
El tipo ObjectDataProvider proporciona una manera cómoda de crear un objeto en XAML y usarlo como origen de datos.
Importante
La documentación de la guía de escritorio para .NET 7 y .NET 6 está en proceso de elaboración.
Hacer referencia a la enumeración
Use el tipo ObjectDataProvider para encapsular una matriz de valores de enumeración proporcionados por el propio tipo de enumeración.
Cree un nuevo
ObjectDataProvider
como un recurso XAML, ya sea en el XAML de la aplicación o en el XAML del objeto con el que está trabajando. En este ejemplo se usa una ventana y se crea elObjectDataProvider
con una clave 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>
En este ejemplo el
ObjectDataProvider
usa tres propiedades para recuperar la enumeración:Propiedad Descripción ObjectType
El tipo de objeto que va a devolver el proveedor de datos. En este ejemplo, System.Enum. El espacio de nombres XAML sys:
se asigna aSystem
.MethodName
El nombre del método que se ejecutará en el tipo System.Enum
. En este ejemplo, Enum.GetValues.MethodParameters
Una colección de valores que se proporcionarán al método MethodName
. En este ejemplo el método toma elSystem.Type
de la enumeración.De hecho, XAML está desglosando una llamada al método, el nombre del método, los parámetros y el tipo de valor devuelto. El
ObjectDataProvider
configurado en el ejemplo anterior es el equivalente del código siguiente:var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
Haga referencia al recurso
ObjectDataProvider
. En el código XAML siguiente se enumeran los valores de enumeración de un control ListBox:<ListBox Name="myComboBox" SelectedIndex="0" ItemsSource="{Binding Source={StaticResource EnumDataSource}}"/>
XAML completo
El código XAML siguiente representa una ventana sencilla que hace lo siguiente:
- Encapsula la enumeración HorizontalAlignment en un origen de datos ObjectDataProvider como un recurso.
- Proporciona un control ListBox para enumerar todos los valores de enumeración.
- Enlaza la propiedad HorizontalAlignment de un control Button al elemento seleccionado en el
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>
Vea también
.NET Desktop feedback
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de