我有一個包含View/Viewmodels層次結構的應用程序。在MVVM查看更改之間保留數據
ViewModelBase包含兩個的ViewModels
private AViewModel _aViewModel = new AViewModel();
private BViewModel _bViewModel = new AViewModel();
我的XAML綁定一個DataControl上以
private ViewModelBase _currentView {get; set;}
public ViewModelBase CurrentView
{
get
{
return _currentView;
}
set
{
_currentView = value;
RaisePropertyChanged("CurrentView");
}
}
,並決定哪個視圖基於的DataTemplates顯示
<DataTemplate DataType="{x:Type vm:AViewModel}">
<vw:AView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:BViewModel}">
<vw:BView />
</DataTemplate>
這一切工作正常,但我不知道如何在查看更改之間保留數據。舉個例子,AViewModel包含一個名爲「Test」的字符串,並且在AView中有一個雙向綁定。通過使用CurrentView = _bviewmodel改變視圖,當我改回到_aviewmodel時,我的數據將不會持續 - 確保任何數據保持在視圖更改之間的最佳方式是什麼,而不是每次創建新的空白視圖模型。 我必須獲取_currentView到_aViewModel,然後返回到_currentView
由於您沒有配置'AViewModel',並且使用雙向綁定綁定到名爲'Test'的字符串,所以數據應該已經保存了。也許在'AViewModel.Test'的'set'方法中添加一個斷點並確保該值實際上已被設置。還要在更改'CurrentView'並確保'AViewModel.Test'仍然設置的位置添加一個斷點。 – Rachel 2012-02-01 19:05:17
與rachel一致,除非您的_aViewModel和_bViewModel超出範圍,數據將保留在內存中。 – Anton 2012-02-01 22:19:47
當我在AViewmodel(Set Test)中添加斷點時,該值仍然存在,但未在ViewModelBase中傳回給CurrentView - 我可以通過Mediator將值發回給ViewModelBase,但是下次再次丟失我設置了「currentView」 - 我認爲我每次都創建一個新的視圖模型,但不知道如何簡單地傳遞一個引用。 – Oli 2012-02-01 22:27:18