Megosztás a következőn keresztül:


Hogyan kössünk hozzá egy enumerációhoz

Ez a példa bemutatja, hogyan lehet enumeráláshoz kötést létrehozni. Sajnos nincs közvetlen módszer az enumerálás adatkötési forrásként való használatára. A Enum.GetValues(Type) metódus azonban értékgyűjteményt ad vissza. Ezek az értékek becsomagolhatók egy ObjectDataProvider, és adatforrásként használhatók.

A ObjectDataProvider típussal kényelmesen létrehozhat egy objektumot az XAML-ben, és adatforrásként használhatja.

Hivatkozás a felsorolásra

Használja a ObjectDataProvider típust az enumerálási típus által biztosított számbavételi értékek tömbjének körbefuttatásához. A következő lépések egy HorizontalAlignment enumerálást ölelnek fel. Igény szerint másik enumerálást is helyettesíthet.

  1. Hozzon létre egy új ObjectDataProvider XAML-erőforrásként az alkalmazásban vagy annak az objektumnak az XAML-jében, amellyel dolgozik. Ez a példa egy ablakot használ arra, hogy létrehozza a ObjectDataProvider-t egy EnumDataSourceerőforráskulcsával.

    <Window.Resources>
        <ObjectDataProvider x:Key="EnumDataSource"
                            ObjectType="{x:Type sys:Enum}"
                            MethodName="GetValues">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="HorizontalAlignment" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>
    </Window.Resources>
    

    Ebben a példában a ObjectDataProvider három tulajdonsággal kéri le az enumerálást:

    Ingatlan Leírás
    ObjectType Az adatszolgáltató által visszaadandó objektum típusa. Ebben a példában System.Enum. A sys: XAML-névtér a System-hez van hozzárendelve.
    MethodName A System.Enum típuson futtatandó metódus neve. Ebben a példában Enum.GetValues.
    MethodParameters A MethodName metódus számára biztosítandó értékek gyűjteménye. Ebben a példában a metódus az System.Type elemet veszi fel az enumerációból.

    Az XAML gyakorlatilag lebontja a metódushívást, a metódus nevét, a paramétereket és a visszatérési típust. Az előző példában konfigurált ObjectDataProvider az alábbi kód megfelelője:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. Hivatkozzon az ObjectDataProvider erőforrásra. Az alábbi XAML egy ListBox vezérlőelem enumerálási értékeit sorolja fel:

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

Teljes XAML

A következő XAML-kód egy egyszerű ablakot jelöl, amely a következőket teszi:

  1. A HorizontalAlignment enumerálást egy ObjectDataProvider adatforrásba csomagolja erőforrásként.
  2. ListBox vezérlőelemet biztosít az összes enumerálási érték listázásához.
  3. Egy Button vezérlőelem HorizontalAlignment tulajdonságát a ListBoxkijelölt eleméhez köti.
<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>

Lásd még