重构视图模型和视图之间的xaml映射

时间:2017-01-06 13:02:08

标签: c# wpf xaml

我有以下内容控制:

<ContentControl Content="{Binding Content}">
  <ContentControl.Resources>
    <DataTemplate DataType="{x:Type viewModels1:A}">
      <views1:A />
    </DataTemplate>
    <DataTemplate DataType="{x:Type viewModels2:B}">
      <views2:B />
    </DataTemplate>
  </ContentControl.Resources>
</ContentControl>

现在,我想将viewModels1:Aviews1:A移到单独的项目P1中,将viewModels2:Bviews2:B移到另一个项目P2中。 P1可能包含带有

的资源字典
<DataTemplate DataType="{x:Type viewModels1:A}">
  <views1:A />
</DataTemplate>

和P2一个类似的字典

<DataTemplate DataType="{x:Type viewModels2:B}">
  <views2:B />
</DataTemplate>

如何让主项目的ContentControl知道视图模型和视图之间的这些映射?是否有可能不在主项目中明确说明类型viewModels:Aviews1:AviewModels2:Bviews2:B,而只是从P1和P2获取映射?

1 个答案:

答案 0 :(得分:0)

  

如何让主项目的ContentControl知道视图模型和视图之间的这些映射?

将定义了DataTemplates的外部程序集中的资源字典合并到应用程序中,例如在App.xaml.cs的OnStartup方法中,或者在ContentControl所在的窗口或UserControl中,具体取决于您在哪个范围内想要应用模板:

public MainWindow()
{
    InitializeComponent();
    Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("pack://application:,,,/WpfControlLibrary1;component/ResourceDictionaryWithDataTemplate.xaml")});
    theContentControl.Content = new WpfControlLibrary1.A()
}

然后应按预期应用模板。