【发布时间】:2023-04-08 15:29:02
【问题描述】:
我已经被这个问题困扰了几个小时了。我遵循了这个似乎是最相关(无框架)WPF MVVM navigate views 的答案,但我遗漏了一些东西并且它不起作用。它只在屏幕上显示 .toString 方法,而不是实际的数据模板。
我拥有的是 MainWindow.xaml、View1.xaml 和 View2.xaml 以及相关的 ViewModel。两个视图都有可以转到另一个视图的按钮。为什么 ContentControl 只显示 .toString()?
MainWindow.xaml
<Window.Resources>
<DataTemplate x:Key="View1Template" DataType="{x:Type viewmodels:View1Model}">
<views:View1 />
</DataTemplate>
<DataTemplate x:Key="View2Template" DataType="{x:Type viewmodels:View2Model}">
<views:View2 />
</DataTemplate>
</Window.Resources>
<Grid>
<ContentControl Content="{Binding CurrentView}" />
</Grid>
MainWindowViewModel.cs
public class MainWindowViewModel : ViewModelBase
{
private ViewModelBase currentView;
public ViewModelBase CurrentView
{
get
{
return currentView;
}
set
{
if (currentView != value)
{
currentView = value;
OnPropertyChanged("CurrentView");
}
}
}
public MainWindowViewModel ()
{
CurrentView = new View1Model();
}
}
我应该如何进行这项工作?此外,交换视图的命令应该在哪里?在这个MainWindowViewModel.cs?
DataContext 在代码隐藏中设置。
【问题讨论】:
-
从 DataTemplates 中删除
x:Key="..."。如果未命名,则根据 DataType 提取它们。链接示例没有x:Key。还链接的示例说明了 view model 中的 ICommand -
这可能对你有帮助:stackoverflow.com/a/6114865/885920
-
你能写下这部分 x:key 作为答案吗?它解决了主要问题