gpt4 book ai didi

c# - 使用 ContentControl 在 WPF 中显示 View 不起作用

转载 作者:太空狗 更新时间:2023-10-30 00:01:23 26 4
gpt4 key购买 nike

我目前正在自己​​做一个小项目以更好地学习 WPF,我问自己的一个问题是如果我想遵循 MVVM 模式,不同 View 之间的导航将如何工作。

我偶然发现了 this question here answering my question ,但不幸的是它似乎不起作用。不是显示我的 View ,而是只显示关联 View 模型的命名空间。因此,例如,我没有看到我的 LoginView,而是看到一个写有“JollyFinance.ViewModels.LoginViewModel”的白屏。

这是我的 MainWindow.xaml 代码:

<Window.Resources>
<!-- Different pages -->
<DataTemplate x:Key="LoginView" DataType="vm:LoginViewModel">
<views:LoginView />
</DataTemplate>
</Window.Resources>

<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>

<Grid>
<ContentControl Content="{Binding CurrentViewModel}"/>
</Grid>

这是我的 MainViewModel.cs:

public class MainViewModel : BindableObject
{
private ViewModelNavigationBase _currentViewModel;

public MainViewModel()
{
CurrentViewModel = new LoginViewModel();
}

public ViewModelNavigationBase CurrentViewModel
{
get { return _currentViewModel; }
set
{
if (_currentViewModel != value)
{
_currentViewModel = value;
RaisePropertyChanged();
}
}
}
}

我的 LoginViewModel.cs 文件:

    public LoginViewModel()
{
LoginCommand = new RelayCommand(Login);
NavigateCommand = new RelayCommand(Login);
}

private void Login(object param)
{
Popup codePopup = new Popup();
TextBlock popupText = new TextBlock();
popupText.Text = "Test";
popupText.Background = Brushes.LightBlue;
popupText.Foreground = Brushes.Blue;
codePopup.Child = popupText;
}

public String Username { get; set; }

public String Password { get; set; }

public ICommand LoginCommand { get; set; }
}

我的 LoginView.xaml 文件是一个 UserControl,由一些 ButtonsTextBlocks 组成。 BindableObject 只是我使用的一个抽象类,它实现了 INotifyProperty 接口(interface)。 ViewModelNavigationBase 是我所有 View 模型都将继承的类;目前它不包含任何内容。

我将如何解决此问题以显示我的 View 而不是相关 View 模型的字符串表示形式?

最佳答案

WPF 不支持使用 string 作为类型标识符的隐式数据模板。

您需要使用 x:Type Markup Extension指定您的 View 模型类型:

<DataTemplate DataType="{x:Type vm:LoginViewModel}">
<views:LoginView />
</DataTemplate>

关于c# - 使用 ContentControl 在 WPF 中显示 View 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577309/

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