【发布时间】:2012-02-01 18:57:11
【问题描述】:
我有一个包含视图/视图模型层次结构的应用程序。
ViewModelBase 包含两个 ViewModel
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,除非您的 _aViewModel 和 _bViewModel 超出范围,否则数据将保留在内存中。
-
当我在 AViewmodel(设置测试)中添加断点但未在 ViewModelBase 中传回 CurrentView 时,该值仍然存在 - 我可以通过 Mediator 将值返回给 ViewModelBase,但是下次我设置“currentView”时,这又会丢失 - 我假设我每次都在创建一个新的视图模型,但不确定如何简单地传递引用。