我有一个包含View / Viewmodels层次结构的应用程序。
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>
所有这些工作正常,但我不确定如何在View更改之间保留数据。例如,假设AViewModel包含一个名为“Test”的字符串,并且在AView中具有双向绑定。通过使用CurrentView = _bviewmodel更改视图,当我更改回_aviewmodel时,我的数据将不会持久 - 确保任何数据保持在视图更改之间的最佳方法是什么,而不是每次都创建新的空白视图模型。 我必须将_currentView转换为_aViewModel,然后返回_currentView
答案 0 :(得分:1)
应该发布我的AView xaml - 里面是
<UserControl.DataContext>
<vm:AViewModel></vm:AViewModel>
</UserControl.DataContext>
所以看来我每次更改视图时都会在Xaml中创建一个新的ViewModel。感谢大家指点我正确的方向。我从Xaml中删除了它,现在一切正常。
答案 1 :(得分:0)
数据应该是持久的。确保每次更改CurrentView时都不创建新的ViewModel。