gpt4 book ai didi

wpf - 如何将DataTemplate添加到资源中?

转载 作者:行者123 更新时间:2023-12-03 07:26:32 26 4
gpt4 key购买 nike

我有一个向导类,它创建一个向导,其中包含在同一项目中定义的页面。 PageViewModel 与 PageView 是分开的。 PageViewModel 是一个普通的 C# 类,派生自 PageViewModelBase 抽象类,而 PageView 是一个 UserControl。为了定义 PageViewModel 和 PageView 之间的映射,我为项目中的每个页面编写了以下代码:

 <Window.Resources>
<DataTemplate DataType="{x:Type OurNewPageViewModel}">
<OurNewPageView />
</DataTemplate>
</Window.Resources>

现在,当用户的代码调用我的向导的构造函数时,我想向向导添加页面。意思是把Pages View和ViewModel移到用户端。例如,为了创建一页向导,用户将编写以下代码:向导 usersWizard = new Wizard(new usersViewModel(), new userView());问题是我不知道如何在构造函数中提供 viewModel 和 View 之间的映射。据我了解,我可以使用两种不同的方法来解决这个问题。首先,使用FrameworkElementFactory,但以下代码不起作用:

        //let we have WelcomePageView wpview and WelcomePageViewModel wpviewmodel

FrameworkElementFactory fef = new FrameworkElementFactory(wpview.GetType());
DataTemplate dt = new DataTemplate();
dt.DataType = wpview.GetType();

dt.VisualTree = fef;

base.Resources.Add(wpviewmodel.GetType(), dt);

第二,使用XamlReader。我可以使用它创建一个数据模板,但我不知道如何将其附加到资源。

最佳答案

在创建 DataTemplate 的代码隐藏中,存在一些错误:

  1. “dt.DataType = wpfView.GetType()”应为“dt.DataType = wpfviewmodel.GetType()”
  2. 将模板添加到 ResourceDictionary 时应使用 DataTemplateKey。

所以你的代码应该是这样的:

DataTemplate dt = new DataTemplate();
dt.DataType = typeof(PageViewModel);
FrameworkElementFactory fef = new FrameworkElementFactory(typeof(PageView));
dt.VisualTree = fef;
DataTemplateKey dtKey = new DataTemplateKey(typeof(PageViewModel));
this.Resources.Add(dtKey, dt);

关于wpf - 如何将DataTemplate添加到资源中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3519351/

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