この例では、列挙型にバインドする方法を示します。 残念ながら、列挙型をデータ バインディング ソースとして直接使用する方法はありません。 ただし、Enum.GetValues(Type) メソッドは値のコレクションを返します。 これらの値は、ObjectDataProvider でラップし、データ ソースとして使用できます。
ObjectDataProvider 型は、XAML でオブジェクトを作成し、データ ソースとして使用する便利な方法を提供します。
列挙型を参照する
ObjectDataProvider 型を使用して、列挙型自体によって提供される列挙値の配列をラップします。 次の手順では、 HorizontalAlignment 列挙体をラップします。 必要に応じて、別の列挙体を置き換えることができます。
アプリケーション XAML または使用しているオブジェクトの XAML で、XAML リソースとして新しい
ObjectDataProviderを作成します。 この例では、ウィンドウを使用し、ObjectDataProviderのリソース キーを使用して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>この例では、
ObjectDataProviderは 3 つのプロパティを使用して列挙体を取得します。プロパティ 説明 ObjectTypeデータ プロバイダーによって返されるオブジェクトの型。 この例では、System.Enumします。 sys:XAML 名前空間は、Systemにマップされます。MethodNameSystem.Enum型で実行するメソッドの名前。 この例では、Enum.GetValuesします。MethodParametersMethodNameメソッドに提供する値のコレクション。 この例では、メソッドは列挙型の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>
こちらも参照ください
- データ バインディングの概要
- バインディング ソースの概要
- StaticResource マークアップ拡張
- 列挙 にバインドする別の方法
.NET Desktop feedback