问题:当前ListBox Items 绑定 集合数据源ListA时候;ListA集合数据源中存在另外一个集合ListB,当更改或往ListB集合中添加数据的时候,通知改变?
实体类继承 INotifyCollectionChanged 即可实现:
BaseViewModel:
public class BaseViewModel : INotifyPropertyChanged, INotifyCollectionChanged, IDisposable { public event PropertyChangedEventHandler PropertyChanged; public event NotifyCollectionChangedEventHandler CollectionChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { if (CollectionChanged != null) { CollectionChanged(this, e); } } public void Dispose() { this.OnDispose(); } protected void OnDispose() { } public void OnCollectionChanged() { } }
ViewModel:
public class ViewModel : BaseViewModel { private List<Person> _lp = null; private RelayCommand _addCommand, _removeCommand; public ViewModel() { LP = new List<Person>(); LP.Add(new Person(1, "aaa")); LP.Add(new Person(2, "bbb")); } public List<Person> LP { get { return _lp; } set { _lp = value; } } public ICommand AddCommand { get { if (_addCommand == null) { _addCommand = new RelayCommand(param => this.Add(), param => this.CanAdd); } return _addCommand; } } public bool CanAdd { get { return true; } } public void Add() { Person ps = new Person(3, "ccc"); LP.Add(ps); CollectionChanged += new NotifyCollectionChangedEventHandler(List_CollectionChanged); OnPropertyChanged("LP"); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, LP[0], 0)); } public ICommand RemoveCommand { get { if (_removeCommand == null) { _removeCommand = new RelayCommand(param => this.Remove(), param => this.CanRemove); } return _removeCommand; } } public bool CanRemove { get { return true; } } public void Remove() { LP.RemoveAt(0); CollectionChanged += new NotifyCollectionChangedEventHandler(List_CollectionChanged); OnPropertyChanged("LP"); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, LP[0], 0)); } private void List_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { // ?????????? } }
完美解决!!
https://social.msdn.microsoft.com/Forums/vstudio/zh-CN/1b55492b-e9ca-4610-a40d-107d64c8ea9f/inotifycollectionchanged-on-listt