当通过另一个视图添加新项目时,MVVM更新ListView

时间:2017-05-22 18:21:27

标签: wpf listview mvvm refresh

就是这种情况。我有一个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数据库中。

1 个答案:

答案 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,您可以执行以下操作: (伪代码)

  1. 在PersonView.xaml.cs
  2. 中添加类似Button_OnClick的事件方法
  3. var view = new NewPersonView();
  4. ((NewPersonViewModel)view.DataContext).Initialize(((PersonViewModel)DataContext).AddPerson); 显然,AddPerson必须是傀儡。
  5. 这个解决方案不干净,但是应该可行,我建议使用城堡windsor IoC。

    编辑2:

    如果要保存数据库中的更改,可以执行以下操作:PersonList.CollectionChanged += ...然后使用e.NewItems查找要添加到db和e.OldItems的项目以查找要删除的那些。

    在PersonViewModel中执行此操作。