通知3部曲:
1.Model继承并实现 INotifyPropertyChanged 接口;
2.数据集合使用ObservableCollection<T>集合;
3.View使用Binding数据对象属性;
————————————————————————————————————————————————————————————————
如果不行再看看集合在赋值前需要实例化,不然就出不来(必须要同一个源才行)
public class ViewModel { private ObservableCollection<Person> _PersonList = new ObservableCollection<Person>();// 可以 /// <summary> /// /// </summary> public ObservableCollection<Person> PersonList { get { return _PersonList; } set { _PersonList = value; } } public ViewModel() { _PersonList = new ObservableCollection<Person>();// 也可以 } }
在Window后面使用的时候定义需要在this.DataContext=vm;之前就完成集合的实例化,否则就通知不了。
ViewModel vm=new ViewModel(); this.DataContext=vm;
————————————————————————————————————————————————————————————————
错误例子:如果ViewModel这么定义就不行了
public class ViewModel { private ObservableCollection<Person> _PersonList; /// <summary> /// /// </summary> public ObservableCollection<Person> PersonList { get { return _PersonList; } set { _PersonList = value; } } public void AddData() { _PersonList = new ObservableCollection<Person>();//这时候已经不行了 } }
具体使用的时候:
ViewModel vm=new ViewModel(); this.DataContext=vm; vm.AddData();
如果这时候界面想正常显示,需要重新赋值,使用this.DataContext=vm;也不好用必须↓↓↓
datagrid.ItemsSource=vm.PersonList;