共用方式為


如何系結至列舉型別 (WPF .NET)

這個範例示範如何系結至列舉。 不幸的是,沒有直接的方法來使用列舉做為資料系結來源。 不過,方法 Enum.GetValues(Type) 會傳回值的集合。 這些值可以包裝在 中 ObjectDataProvider ,並當做資料來源使用。

ObjectDataProvider 類型提供在 XAML 中建立物件的便利方式,並將其當做資料來源使用。

重要

.NET 7 和 .NET 6 的桌面指南檔正在建置中。

參考列舉

ObjectDataProvider使用 型別來包裝列舉型別本身所提供的列舉值陣列。

  1. 在您的應用程式 XAML 或您正在使用之物件的 XAML 中,建立新的 ObjectDataProvider 作為 XAML 資源。 此範例會使用視窗,並使用 的資源索引鍵 EnumDataSource 建立 ObjectDataProvider

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

    在此範例中,會 ObjectDataProvider 使用三個屬性來擷取 列舉:

    屬性 說明
    ObjectType 要由資料提供者傳回的物件類型。 在此範例中,為 System.Enumsys:XAML 命名空間會對應至 System
    MethodName 在 型別 System.Enum 上執行的方法名稱。 在此範例中,為 Enum.GetValues
    MethodParameters 要提供給 MethodName 方法的值集合。 在此範例中,方法會採用 System.Type 列舉的 。

    實際上,XAML 會細分方法呼叫、方法名稱、參數和傳回型別。 ObjectDataProvider在上一個範例中設定的 ,相當於下列程式碼:

    var enumDataSource = System.Enum.GetValues(typeof(System.Windows.HorizontalAlignment));
    
    Dim enumDataSource = System.Enum.GetValues(GetType(System.Windows.HorizontalAlignment))
    
  2. ObjectDataProvider參考資源。 下列 XAML 會列出 控制項中的 ListBox 列舉值:

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

完整 XAML

下列 XAML 程式碼代表執行下列動作的簡單視窗:

  1. HorizontalAlignment 列舉包裝在資料來源中 ObjectDataProvider 做為資源。
  2. ListBox提供控制項來列出所有列舉值。
  3. Button 控制項的 HorizontalAlignment 屬性系結至 中 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>

另請參閱