|
カテゴリ:カテゴリ未分類
この記事はこちらに綺麗にまとめ直しました。
WPFのデータバインディング感覚が身につかなくて苦労しています。そんな中でこのサイトはとても参考になりました。 http://blog.okazuki.jp/entry/2014/10/29/220236 自分なりに落とすため、上記サイトを参考に分からない単語を調べながらコードを書いたら動きました。何となくわかった気になったので調べた事をメモします。 ObservableCollection クラス https://msdn.microsoft.com/ja-jp/library/ms668604.aspx 項目が追加または削除されたとき、あるいはリスト全体が更新されたときに通知を行う動的なデータ コレクションを表します。 つまり、ObservableCollectionをしていしておけば、C#内でプロパティソース値を変更したものがXAML上のターゲット値に反映される。使用するデータは、オブジェクトのコレクションになる。 IEnumerable インターフェイス https://msdn.microsoft.com/ja-jp/library/9eekhta0(v=vs.110).aspx 指定した型のコレクションに対する単純な反復処理をサポートする列挙子を公開します。コレクションのデータバインディングは、IEnumerableを実装していればどれでも対象になる。 INotifyCollectionChanged インターフェイス https://msdn.microsoft.com/ja-jp/library/system.collections.specialized.inotifycollectionchanged(v=vs.110).aspx 項目が追加、削除された場合やリスト全体がクリアされた場合など、動的な変更をリスナーに通知します。IEnumerableインターフェースを実装し、さらにINotifyCollectionChangedインターフェースを実装しているコレクションは追加・削除などの変更操作をデータバインディングのターゲットと同期する事ができます。 XAML <ListBox.ItemTemplate> </ListBox.ItemTemplate> C# private ObservableCollection people; public MainWindow() { InitializeComponent(); // DataContextにPersonのコレクションを設定する this.people = new ObservableCollection(Enumerable.Range(1, 100) .Select(x => new Person { Name = "tanaka" + x, Age = (30 + x) % 50 })); this.DataContext = people; } public class Person { public string Name { get; set; } public int Age { get; set; } } private void button_Click(object sender, RoutedEventArgs e) { // コレクションに要素を追加する。 this.people.Insert(0, new Person { Name = "追加したtanaka", Age = 100 }); } private void button1_Click(object sender, RoutedEventArgs e) { // 全削除 this.people.Clear(); } お気に入りの記事を「いいね!」で応援しよう
Last updated
Apr 8, 2017 06:10:15 AM
コメント(0) | コメントを書く |