WPFはBindingに始まりBindingに終わるといっても
過言ではない。気がする。
今回はコレクション要素のバインドについて。
例えば配列の0番目の要素に対してバインドしたいときは
Hoge="{Binding Path=PiyoArray[0]}"
と書けばできてしまう。
さてでは、Dictionaryとかを使って、キーにEnum(列挙型)の定数を
指定したいときはどうやって書けばよいだろう。
えらいもんで、探せばやってくれてる人がいるもんだな。
binding to value in Dictionary with enum as a key
上のページで十分わかりやすいと思うけど、
もう少しシンプルな例で(変わんねえかな)書いておく。
まず適当なEnum型。
public enum MyEnum { Zero, Key1, Key2, Key3, }
このEnumがKeyのDictionaryをプロパティに持つDataContextクラス。
public class ViewModel { public Dictionary<MyEnum, string> MyDic { get; private set; } public ViewModel() { MyDic = new Dictionary<MyEnum, string> { { MyEnum.Zero, "000" }, { MyEnum.Key1, "111" }, { MyEnum.Key2, "222" }, { MyEnum.Key3, "333" }, }; } }
そしてXAML。
<Window x:Class="BindingToEnumIndexerSample.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BindingToEnumIndexerSample" Title="MainWindow" Height="200" Width="200"> <StackPanel Orientation="Vertical"> <TextBlock Text="{Binding Path=MyDic[(local:MyEnum)Key1]}" /> <TextBlock Text="{Binding Path=MyDic[(local:MyEnum)Key2]}" /> <TextBlock Text="{Binding Path=MyDic[(local:MyEnum)Key3]}" /> </StackPanel> </Window>
キャストみたいな書き方をするのね。
ふつう、Bindingの「Path=」は省略できるんだけど、
上記の例だとなぜか省略できなかった。
細かいルールがあるのだろうきっと。