C# WPF enumに属性を付けてComboBoxにバインドして便利に使う
参考元
こちらの記事を参考にさせていただきました
できること
↓のような感じで項目名と属性で追加情報を付けたenumを定義しておけば
public enum Fruit { 未選択, [Price("\\150"), Color(KnownColor.Red), ResourceName("apple.png")] りんご, [Price("\\80"), Color(KnownColor.Yellow), ResourceName("banana.png")] ばなな, [Price("\\120"), Color(KnownColor.Orange), ResourceName("orange.png")] みかん }
項目名をそのままコンボボックスで使ったり、追加情報を簡単に取得することができるようになります
ソースコード
ソースコードはこちら github.com
ポイント
属性の定義方法や必要な拡張メソッド等は参考記事を参照してください
(参考記事内のコードスニペットattrgを使用させていただきました)
public enum Fruit { 未選択, [Price("\\150"), Color(KnownColor.Red), ResourceName("apple.png")] りんご, [Price("\\80"), Color(KnownColor.Yellow), ResourceName("banana.png")] ばなな, [Price("\\120"), Color(KnownColor.Orange), ResourceName("orange.png")] みかん }
- enumで列挙した値をすべて取り出して、コンボボックスのデータソースに追加します
DataSource = new ReactiveCollection<Fruit>(); foreach (Fruit g in Enum.GetValues(typeof(Fruit))) { DataSource.Add(g); }
SelectedItem.Subscribe(g => { ItemName.Value = $"Item : {g}"; ItemPrice.Value = $"Price : {g.GetPrice()}"; ItemColor.Value = $"Color : {g.GetColor()} "; SelectedColor.Value = g.GetColor().ToMediaColor(); ItemImage.Value = new Uri($"..\\Resource\\{g.GetResourceName()}", UriKind.Relative); });