列挙型にバインドする方法 (WPF .NET)
この例では、列挙型にバインドする方法を示します。 残念ながら、列挙型をデータ バインディング ソースとして使用する直接的な方法はありません。 ただし、Enum.GetValues(Type) メソッドは、値のコレクションを返します。 これらの値は ObjectDataProvider でラップして、データ ソースとして使用できます。
ObjectDataProvider 型は、XAML でオブジェクトを作成し、データ ソースとして使用する便利な方法を提供します。
重要
.NET 7 と .NET 6 用のデスクトップ ガイド ドキュメントは作成中です。
列挙型を参照する
ObjectDataProvider 型を使用して、列挙型自体によって提供される列挙値の配列をラップします。
アプリケーション XAML または使用しているオブジェクトの XAML のいずれかで、XAML リソースとして新しい
ObjectDataProvider
を作成します。 この例では、ウィンドウを使用して、リソース キー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
は 3 つのプロパティを使用して列挙型を取得します。プロパティ Description 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>
関連項目
.NET Desktop feedback
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示