gpt4 book ai didi

wpf - 使用WPF在Catel中设置DataContext

转载 作者:行者123 更新时间:2023-12-03 10:16:17 25 4
gpt4 key购买 nike

因此,我开始研究Catel MVVM框架,它看起来可以解决我遇到的几个问题,但是我确实有一个愚蠢的问题。我想我只是想念一些小东西。

我选择了一个较小的WPF项目之一来切换Catel,这是我学习该项目的一种方式。我有一个简单的“玩家注册”表格,其中包含姓名和姓氏。我使用vm codenippet重新创建了原始 View 模型,一切都很好,所有属性和属性都是我在文档中阅读的一样。

然后,我将用于“玩家注册”(PlayerRegistrationView)的UserControl更改为catel:UserControl。我将PlayerRegistrationView放置在标准WPF窗口上(仅此而已,仅将View的xmlns和 View 作为窗口上的唯一内容,没有属性)

但是这是我的问题:

我有一个MainWindow并带有一个按钮,用于打开播放器注册窗口。单击事件仅仅是这样:

private void ButtonPlayerClick(object sender, RoutedEventArgs e)
{
var playerRegistration = new PlayerRegistrationDialog
{
Owner = this,
DataContext = new PlayerRegistrationViewModel(),
};

playerRegistration.Show();
}

运行我的程序,然后单击按钮,在我的PlayerRegistrationView上导致NotSupportedException:无法解析 View 的 View 模型。使用GetViewModelType()方法或IViewModelLocator

我试图使ViewModel成为窗口上的静态资源,并在那里设置datacontext,但是它会产生相同的错误。

我很茫然。我错过了什么?

谢谢

最佳答案

Catel的全部要点在于,它会自动连接所有 View 和 View 模型。您尝试实现的“复杂”功能是将 View 放置在窗口上。您希望窗口具有与 View 相同的数据上下文,以便在窗口中也做一些操作。

在Catel中,可以将具有数据上下文管理的任何 View 放置在DataWindow(Catel中的窗口)上。然后它将像这样工作:

数据窗口
| =>查看

如果DataWindow和View共享相同的 View 模型类型,则它们共享相同的 View 模型。例如:

  • PlayerRegistrationWindow =>源自catel:DataWindow
  • PlayerRegistrationView =>源自catel:UserControl

  • 由于两者均以PlayerRegistration开头,因此它们都会自动解析为PlayerRegistrationViewModel。

    要显示该窗口,您唯一要做的就是:

    var viewModel = new PlayerRegistrationViewModel();
    var uiVisualizerService = ServiceLocator.Default.ResolveType<IUIVisualizerService>();
    uiVisualizerService.Show(viewModel);

    一切都会自动运行,您不必担心自己设置任何数据上下文。

    关于wpf - 使用WPF在Catel中设置DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551787/

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