ListBoxのDataSourceバインドについて
はじめに
C#のフォームにて、ListBoxのDataSourceに対して、
ReactiveProperty や ReactiveCollectionを使ってデータバインドを試みた。
しかし、初期値は反映されるけど、コレクションの操作はViewに反映されなくて困った。
PropertyChangedを使って反映
DataSourceに関して、ReactivePropertyを使わず、変更通知は自前でやる事にした。
-
ViewModelクラスにListBoxのDataSource用プロパティを定義する
ViewModelclass HogeViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public List<string> ListDataSource { get; } = new List<string>() { "初期", "データ" }; ... }
Formのデザインビューから、ListBoxのDataSourceを、先程定義した ListDataSource を選択する
-
各コレクションの操作用メソッドを実装する
private void AddListItem() { ListDataSource.Add("hoge"); PropertyChanged(ListDataSource, new PropertyChangedEventArgs(nameof(ListDataSource))); } private void ClearListItem() { ListDataSource.Clear(); PropertyChanged(ListDataSource, new PropertyChangedEventArgs(nameof(ListDataSource))); }
上記の手順で要求を満たせたので、メモとして残しておく。
※追記 2018/03/30
BindingList を使えば、PropertyChanged を利用しなくても通知が行えた。
public List<string> ListDataSource { get; } = new List<string>() { "初期", "データ" };
↓
public BindingList <string> ListDataSource { get; } = new BindingList <string>() { "初期", "データ" };
Author And Source
この問題について(ListBoxのDataSourceバインドについて), 我々は、より多くの情報をここで見つけました https://qiita.com/unpi/items/b25bebcd5750a4ae5cdf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .