如何系結至列舉型別 (WPF .NET)
這個範例示範如何系結至列舉。 不幸的是,沒有直接的方法來使用列舉做為資料系結來源。 不過,方法 Enum.GetValues(Type) 會傳回值的集合。 這些值可以包裝在 中 ObjectDataProvider ,並當做資料來源使用。
此 ObjectDataProvider 類型提供在 XAML 中建立物件的便利方式,並將其當做資料來源使用。
重要
.NET 7 和 .NET 6 的桌面指南檔正在建置中。
參考列舉
ObjectDataProvider使用 型別來包裝列舉型別本身所提供的列舉值陣列。
在您的應用程式 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.Enum 。 sys:
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))
ObjectDataProvider
參考資源。 下列 XAML 會列出 控制項中的 ListBox 列舉值:<ListBox Name="myComboBox" SelectedIndex="0" ItemsSource="{Binding Source={StaticResource EnumDataSource}}"/>
完整 XAML
下列 XAML 程式碼代表執行下列動作的簡單視窗:
- 將 HorizontalAlignment 列舉包裝在資料來源中 ObjectDataProvider 做為資源。
- ListBox提供控制項來列出所有列舉值。
- 將 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>
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應