Condividi tramite


Come eseguire l'associazione a un'enumerazione

In questo esempio viene illustrato come eseguire l'associazione a un'enumerazione . Sfortunatamente non esiste un modo diretto per usare un'enumerazione come origine di data binding. Tuttavia, il metodo Enum.GetValues(Type) restituisce una raccolta di valori. Questi valori possono essere racchiusi in un ObjectDataProvider e usati come origine dati.

Il tipo ObjectDataProvider offre un modo pratico per creare un oggetto in XAML e usarlo come origine dati.

Fare riferimento all'enumerazione

Utilizzare il tipo ObjectDataProvider per incapsulare un array di valori di enumerazione forniti dal tipo di enumerazione stessa. La procedura seguente avvolge un'enumerazione HorizontalAlignment. Se necessario, è possibile sostituire un'enumerazione diversa.

  1. Crea una nuova ObjectDataProvider come risorsa XAML, nel codice XAML dell'applicazione o nel codice XAML dell'oggetto con cui stai lavorando. Questo esempio usa una finestra e crea il ObjectDataProvider con una chiave di risorsa di 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>
    

    In questo esempio, il ObjectDataProvider usa tre proprietà per recuperare l'enumerazione :

    Proprietà Descrizione
    ObjectType Tipo di oggetto da restituire dal provider di dati. In questo esempio, System.Enum. Lo spazio dei nomi XAML sys: viene mappato a System.
    MethodName Nome del metodo da eseguire sul tipo System.Enum. In questo esempio, Enum.GetValues.
    MethodParameters Raccolta di valori da fornire al metodo MethodName. In questo esempio il metodo accetta il System.Type dell'enumerazione .

    In effetti, il codice XAML suddivide una chiamata al metodo, il nome del metodo, i parametri e il tipo restituito. Il ObjectDataProvider configurato nell'esempio precedente è l'equivalente del codice seguente:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Fare riferimento alla risorsa ObjectDataProvider. Il codice XAML seguente elenca i valori di enumerazione in un controllo ListBox:

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

XAML completo

Il codice XAML seguente rappresenta una finestra semplice che esegue le operazioni seguenti:

  1. Incapsula l'enumerazione HorizontalAlignment in una fonte di dati ObjectDataProvider come risorsa.
  2. Fornisce un controllo ListBox per elencare tutti i valori di enumerazione.
  3. Associa la proprietà Button di un controllo HorizontalAlignment all'elemento selezionato nel 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>

Vedere anche