【发布时间】:2016-05-23 21:55:35
【问题描述】:
我拥有的是三种不同的观点。我有每个视图的视图模型。我所做的是将视图的数据上下文设置为相应视图模型的新实例,其工作方式如下所示:
public LoginScreen()
{
InitializeComponent();
DataContext = new LoginScreenViewModel();
}
这可以按需要工作。一切都正确绑定等等。
现在,我将每个视图都设置为 UserControl。我的 Window 包含每个视图的数据模板,如下所示:
<Window.Resources>
<DataTemplate DataType="{x:Type vm:LoginScreenViewModel}">
<v:LoginScreen/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:MainWindowViewModel}">
<v:MainWindow/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:AboutScreenViewModel}">
<v:AboutScreenView/>
</DataTemplate>
</Window.Resources>
我这样显示视图:
<Grid>
<ContentControl Content="{Binding CurrentView}"/>
</Grid>
这允许我在窗口的视图模型中创建视图模型,将它们设置为 CurrentView,并且与该视图模型关联的视图显示在窗口中。这一切正常。
我的问题是,如果我切换视图,存储在视图的 ViewModel 中的所有信息都会被破坏。我的问题是,如何将每个视图的数据上下文绑定到创建它的视图模型,而不是绑定到后面代码中的新实例?
【问题讨论】:
-
不要使用 new() 实例化您的 ViewModel,而是尝试使用 SimpleIoC 或其他框架来创建您的 ViewModel 类的单例
标签: c# wpf xaml mvvm datacontext