就是这种情况。我有一个MVVM的WPF项目。让我试着解释一下..
PersonView.xaml 显示了一个包含所有人的ListView,在此View后面有ViewModel PersonViewModel.cs 。这里ListView PersonList被填充。
在 PersonView.xaml 上也是一个按钮,可以打开另一个视图, NewPersonView.xaml ,后面有ViewModel NewPersonViewModel.cs 。
当我点击 NewPersonView.xaml 上的保存按钮时,如何刷新 PersonView.xaml 上的ListView,以便添加新人时?
如果需要,我可以提供代码吗?
编辑:当我添加一个新的Person时,它将它保存在一个sql数据库中。
答案 0 :(得分:0)
一种方法是在初始化时将Action传递给NewPersonViewModel:
private void AddPerson(Person per) {
PersonList.Add(per);
NotifyOfPropertyChange(() => PersonList); // this wont be needed if you use ObservableCollection
}
NewPersonViewModel.Initialize:
private Action<Person> _addPersonAction;
Initialize(Action<Person> addPersonAction) {
_addPersonAction = addPersonAction;
}
如果您想添加一个人,您可以调用此操作。
修改强>
如果您不使用IoC,您可以执行以下操作: (伪代码)
var view = new NewPersonView();
((NewPersonViewModel)view.DataContext).Initialize(((PersonViewModel)DataContext).AddPerson);
显然,AddPerson必须是傀儡。这个解决方案不干净,但是应该可行,我建议使用城堡windsor IoC。
编辑2:
如果要保存数据库中的更改,可以执行以下操作:PersonList.CollectionChanged += ...
然后使用e.NewItems
查找要添加到db和e.OldItems
的项目以查找要删除的那些。
在PersonViewModel中执行此操作。