gpt4 book ai didi

c# - MVVM WPF 从 View 内部导航 View

转载 作者:行者123 更新时间:2023-12-03 11:02:27 25 4
gpt4 key购买 nike

我已经被这个问题困扰了几个小时了。我遵循了这个似乎最相关的答案(无框架)WPF MVVM navigate views ,但我错过了一些东西,它不起作用。它只在屏幕上显示 .toString 方法,而不是实际的数据模板。

我拥有的是 MainWindow.xaml , View1.xamlView2.xaml和相关的 ViewModel。两个 View 都有可以转到另一个 View 的按钮。为什么 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();
}

}

我应该如何进行这项工作?此外,交换 View 的命令应该在哪里?在这个 MainWindowViewModel.cs ?

DataContext 在代码隐藏中设置。

最佳答案

使示例工作删除 x:Key="..."来自数据模板。

ContentControl 绑定(bind)到 CurrentView。 CurrentView 是一个 View 模型实例,没有可视化表示(不是从框架 Visual 类派生的)。

没有ContentTemplate ,因此 ContentControl 尝试为 View1Model 查找默认 DataTemplate (或 View2Model )类型。但是在 Resources 中声明的两个 DataTemplate 都不是默认的,它们以 x:Key 命名.所以 ContentControl 什么也没找到并回退到有保证的方法:显示 Content 的字符串表示,因为每个 .NET 对象都有 ToString()方法。

关于c# - MVVM WPF 从 View 内部导航 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51265998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com