private void MyButton2_Click(object sender, RoutedEventArgs e) { myData[0] = new MyColorData { Color = Colors.MediumSpringGreen, Name = nameof(Colors.MediumSpringGreen) }; //↓だとBindingが外れてしまう //myData[0].Color = Colors.MediumSpringGreen; //myData[0].Name = nameof(Colors.MediumSpringGreen); }
ObservableCollection <MyColorData> myData;//Bindingのソースになるデータ public MainWindow() { InitializeComponent(); //データリスト作成 //データを入れるリストには変更通知してくれるObservableCollectionを使うのがラク myData = new ObservableCollection <MyColorData>(); myData.Add(new MyColorData { Color = Colors.BlanchedAlmond, Name = "BlanchedAlmond" }); myData.Add(new MyColorData { Color = Colors.Orange, Name = "Orange" }); myData.Add(new MyColorData { Color = Colors.Olive, Name = nameof(Colors.Olive) }); myData.Add(new MyColorData { Color = Color.FromRgb(0xEB, 0x79, 0x88), Name = "紅梅" }); myData.Add(new MyColorData { Color = Color.FromRgb(242, 216, 223), Name = "桜色" }); //アプリ自体にデータをBinding、参照の追加、関連付け this.DataContext = myData; //ボタンクリック時の動作 //MyButton1.Click += (s, e) => { myData[0].Color = Colors.Tomato; myData[0].Name = "Tomato"; }; //↑だとBindingが外れてしまう //ボタンクリックでデータの変更 MyButton1.Click += (s, e) => { myData[0] = new MyColorData { Color = Colors.Tomato, Name = "Tomato" }; }; //↑ラムダ式↓今までの MyButton2.Click += MyButton2_Click; //Colorsクラスの色一覧表示、MyListBoxWPFColors用 //TypeクラスのGetPropertyメソッドを使ってColorsクラスの色取得 System.Reflection.PropertyInfo[] infos = typeof(Colors).GetProperties( System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); var wpfColors = new ObservableCollection <MyColorData>();//Bindingのソースになるデータ foreach (var item in infos) { wpfColors.Add(new MyColorData { Color = (Color)item.GetValue(null), Name = item.Name }); } //関連付けはアプリ自体じゃなくて対象のListBoxにした MyListBoxWPFColors.DataContext = wpfColors; }