【问题标题】:How to provide DataTemplate from a prism module如何从 prism 模块提供 DataTemplate
【发布时间】:2018-09-26 23:54:29
【问题描述】:

我有一个 WPF 应用程序,使用 Prism,我们正在使用一些模块(在全球范围内,还有很多微服务)。

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

由于我必须从模块中执行此操作,因此我不能只创建一个 ResourcesDictionary 并将其添加到 App 资源中。

你会怎么做?我们的目标是很好地隔离特征。

【问题讨论】:

  • 您可以在您喜欢的任何级别合并资源字典。他们有范围。因此,在区域级别合并为资源是一种选择。不过,您可以通过任何代码访问 application.current.resources。
  • @Andy 好的,这是我一直都能做的事情吗?或者我应该在加载 Windows 之前绝对注册我的资源?还是只是控制?您有关于如何以编程方式合并资源字典的示例吗?

标签: wpf module prism datatemplate xaml-resources


【解决方案1】:

我认为您还没有真正完全解释您的目的或您在这里的内容。考虑到这个附带条件。

如果您在应用中创建了常规资源字典,则可以将其合并到 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);

如果您在标记中合并资源字典,甚至不必编译它。我从未在代码中尝试过,但我想你可能会发现你可以合并一个“松散”的未编译资源字典。如果它不能直接工作,您绝对可以 xamlreader.Load 或 .Parse 将未编译的 rd 解析为内存中的一个。

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

【讨论】:

  • 谢谢,我想这样就可以了。到目前为止,我们从来没有用两个不同的 View 显示相同的 ViewModel,所以我想应用程序范围对我们来说已经足够了。
猜你喜欢
  • 1970-01-01
  • 2011-09-18
  • 2012-07-29
  • 1970-01-01
  • 2020-09-18
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多