我所拥有的是三种不同的观点。我对这些观点都有看法。我做的是视图设置为相应的视图模型的新实例的DataContext的,这就像如下图所示:DataContext绑定
public LoginScreen()
{
InitializeComponent();
DataContext = new LoginScreenViewModel();
}
根据需要这个工作。一切都正确地结合在一起。
现在,我将每个视图设置为UserControls。我有我的窗口,对我的每一个观点的DataTemplates如下图所示:
<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>
这让我创造我的窗口视图模型的ViewModels设置它们因为CurrentView和与该视图模型关联的视图显示在窗口中。这一切正常工作。
我的问题是,如果我切换视图,存储在视图的ViewModel中的所有信息都将被销毁。我的问题是,如何将每个视图的datacontext绑定到正在创建它的视图模型,而不是在后面的代码中的新实例?
而不是使用new()实例化您的ViewModel,请尝试使用SimpleIoC或其他框架来创建您的ViewModel类的单身人士 – Mangist