我所擁有的是三種不同的觀點。我對這些觀點都有看法。我做的是視圖設置爲相應的視圖模型的新實例的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