Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将DataTemplate添加到资源中?_Wpf_Mvvm - Fatal编程技术网

Wpf 如何将DataTemplate添加到资源中?

Wpf 如何将DataTemplate添加到资源中?,wpf,mvvm,Wpf,Mvvm,我有一个类向导,它创建了一个向导,在同一个项目中定义了页面。PageViewModel与PageView分离。PageViewModel是从PageViewModelBase抽象类派生的普通C#类,PageView是一个用户控件。为了定义PageViewModel和PageView之间的映射,我为项目中的每个页面编写了以下代码: <Window.Resources> <DataTemplate DataType="{x:Type OurNewPageViewModel

我有一个类向导,它创建了一个向导,在同一个项目中定义了页面。PageViewModel与PageView分离。PageViewModel是从PageViewModelBase抽象类派生的普通C#类,PageView是一个用户控件。为了定义PageViewModel和PageView之间的映射,我为项目中的每个页面编写了以下代码:

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

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

在创建数据模板的代码中,有几个错误:

  • “dt.DataType=wpfView.GetType()”应该是“dt.DataType=wpfviewmodel.GetType()”
  • 将模板添加到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);
    

    非常好!这是了解国际奥委会的一个超级开始,有自己的引导者等等。。。谢谢:-)
    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);