2017-05-22 25 views
0

這就是情況。我有一個MVVM的WPF項目。讓我試着解釋一下吧..當通過另一個視圖添加新項目時,MVVM更新ListView

PersonView.xaml顯示了所有人一個ListView,這種觀點背後有視圖模型PersonViewModel.cs。這裏ListView PersonList被填充。

PersonView.xaml也打開另一種觀點,NewPersonView.xaml與視圖模型NewPersonViewModel.cs它背後的按鈕。

我怎麼能刷新PersonView.xaml ListView控件,當我點擊NewPersonView.xaml保存按鈕,所以當添加新的人嗎?

如果需要,我可以提供代碼?

編輯:當我添加一個新的人,它保存在一個SQL數據庫。

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; 
} 

如果你想添加一個人你可以調用這個初始化它的時候要做到這一點

+0

如果您的ListView綁定到ObservableCollection,將自動發生。如果它沒有爲你工作,那麼你需要提供你的代碼,以便我們能夠弄清楚什麼是錯誤的。 – AQuirky

+0

他們必須共享完全相同的視圖模型。 – Will

回答

0

一種方式是通過一個動作你NewPersonViewModel行動。

編輯:

如果你不使用的IoC,你可以做這樣的事情: (僞代碼)

  1. 添加事件在PersonView.xaml.cs
  2. 評判像Button_OnClick
  3. var view = new NewPersonView();
  4. ((NewPersonViewModel)view.DataContext).Initialize(((PersonViewModel)DataContext).AddPerson); 顯然AddPerson將不得不是傀儡。

此解決方案不乾淨,但應該工作,我推薦使用castle windsor IoC。

編輯2:

如果要保存在數據庫中的變化,你可以這樣做:PersonList.CollectionChanged += ...,然後用e.NewItems找到您要添加到數據庫的項目和e.OldItems地發現,那些刪除。

在PersonViewModel中執行此操作。

相關問題