WPFで列挙体をListBoxにBindする
前回は static な配列を ListBox にバインドしてみたので、今回は列挙型のメンバーをリストボックスやコンボボックスに表示してみます。
方法 : 列挙値にバインドする
参考にした MSDN の情報です。
スポンサーリンク
名前空間の追加
System.Enum のメソッドを使うので、System 名前空間を追加します。XAML のルート要素の xmlns に並んでいるところに下記のように追加しましょう。また、列挙体の属している名前空間も同様に追加しておきます。
1 2 3 4 |
<Window ~ 中略 ~ xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:local="clr-namespace:Fluorometer"> |
リソースに追加
Resources にこんな感じで書きます。こうすることで Detectors に列挙体の値が格納されます。
x:Type の TypeName に列挙したい列挙体の型名を渡します。このとき名前空間指定が必要ですので、忘れずに。
1 2 3 4 5 6 7 |
<Window.Resources> <ObjectDataProvider x:Key="Detectors" MethodName="GetValues" ObjectType="{x:Type sys:Enum}"> <ObjectDataProvider.MethodParameters> <x:Type TypeName="local:Detector" /> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </Window.Resources> |
ItemsSource に Bind
定義した ObjectDataProvider をリストボックスの ItemsSource にバインドすれば完了です。選択されている値は SelectedValue に Bind すれば OK です。
1 |
<ListBox ItemsSource="{Binding Source={StaticResource Detectors}}" SelectedValue="{Binding Detector}"></ListBox> |
これでリストボックスには列挙型の各メンバーを文字列化したものが表示されるはずです。
値コンバーターの併用
IValueConverter を併用するときは ItemTemplate に設定しましょう(このあたりは 前回の記事 も参照してください)。
1 2 3 4 5 6 7 |
<ComboBox ItemsSource="{Binding Source={StaticResource Detectors}}" SelectedValue="{Binding Detector}"> <ComboBox.ItemTemplate> <DataTemplate> <ContentPresenter Content="{Binding Converter={StaticResource DetectorConverter}}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> |
前回と同様にこんな感じで表示されます。
最後までお読みいただきありがとうございました m(_ _)m
スポンサーリンク