在MVVM视图更改之间保留数据

时间:2012-02-01 18:57:11

标签: wpf mvvm

我有一个包含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

2 个答案:

答案 0 :(得分:1)

应该发布我的AView xaml - 里面是

 <UserControl.DataContext>
    <vm:AViewModel></vm:AViewModel>
</UserControl.DataContext>

所以看来我每次更改视图时都会在Xaml中创建一个新的ViewModel。感谢大家指点我正确的方向。我从Xaml中删除了它,现在一切正常。

答案 1 :(得分:0)

数据应该是持久的。确保每次更改CurrentView时都不创建新的ViewModel。