如何从棱镜模块提供数据模板

How to provide DataTemplate from a prism module

我有一个 WPF 应用程序,使用 Prism,我们正在使用一些模块(更广泛地说,有很多微服务)。

我正在寻找为应用程序提供可用于表示模型的模板的最佳做法。

因为我必须从模块中执行此操作,所以我不能只创建 ResourcesDictionary 并将其添加到应用程序资源中。

你会怎么做?我们的objective就是要很好的隔离特征。

我认为你还没有真正完整地解释你的目的或你在这里有什么。考虑到这个条件。

如果您在应用程序中创建了常规资源字典,您可以将其合并到 app.xaml。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary1.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后您可以使用 x:Key 或隐式样式在标记中定位资源。并以数据类型为目标进行模板化。

这样做是将资源字典中的内容添加到某种字典中。 (它不完全是一本字典)它有键和值。
这具有您整个应用程序的范围。
您可以参考那里的东西并将它们切换出去。您可以在代码中合并另一个资源字典。但是,一旦它们进入其中,它们就会一直存在,直到您关闭应用程序或清除这些资源。

您可以阅读资源词典:

ResourceDictionary rd = new ResourceDictionary
{
     Source = new Uri("Dictionary1.xaml", UriKind.Relative)
};

并合并它:

Application.Current.Resources.MergedDictionaries.Add(rd);

如果在标记中合并资源字典,甚至不必编译它。我从来没有在代码中尝试过,但我猜你可能会发现你可以合并一个 "loose" 未编译的资源字典。如果它不能直接工作,你肯定可以 xamlreader.Load 或 .Parse 一个未编译的 rd 到内存中。

这增加了应用范围。如果你想要,那么也许你应该在 app.xaml 中合并你的资源字典。
如果你想要范围,那么 windows、用户控件等都有资源。您可以在几乎任何您喜欢的级别合并资源字典,然后它的范围将比应用程序更窄。