Application.Resources用于存储应用程序数据

时间:2010-09-14 18:28:45

标签: c# .net wpf

如果这是一个好的或坏的做法,或者最喜欢这样做的方式,我只是好奇。

我所指的实践是,因为我是WPF的新手,所以我发现将字符串,xdocuments和域对象放入app.xaml中的Application.Resources非常方便和有用。当整个应用程序需要它们的数据时,以及x:key的简单静态资源绑定。

好?坏?为什么?我该怎么做呢?请不要链接到大型MVVM等等,只是寻找关于这个特定实践的简明答案,如果MVVM有答案我很高兴听到它是什么,我只是不想阅读6页的教程或博客找出..

3 个答案:

答案 0 :(得分:1)

在以下情况下将内容放入App.xaml可能会出现问题:

  1. 您开始将应用程序分支到单独的程序集中,因为程序集无法“看到”app.xaml设计时 - 您只能找到运行时的错误。
  2. 你有一个神奇的字符串用于指向你的资源,很容易拼错 - 或者更糟糕的是,意外复制。
  3. 以后很难找到任何给定资源的使用位置以及是否可以安全地更改(“UpdateFrequency的用途是什么......”)
  4. 您希望它是可配置的 - app.config文件的AppSettings部分对于这些类型的设置要好得多。
  5. 与使用全局静态变量进行设置基本相同。

    编辑:我更喜欢在App.Xaml中拥有的东西是:

    • 全局样式和数据模板 - 换句话说 - 用于视觉呈现的内容可以覆盖“标准”设置 - 因此通常它们没有x:Key标签,而是TargetType =“{x:Type SomeType}”< / LI>

    希望这有帮助!

答案 1 :(得分:1)

这对于在应用程序中共享的内容有意义 - “不要重复自己”。我还建议使用合并应用程序资源的项目特定资源。控件应引用该而不是应用程序资源。

这使得项目中的控件更加独立。

我还建议将资源分解为逻辑组并合并它们而不是“一大桶”。

答案 2 :(得分:1)

我实现了一个应用程序视图模型(AVM)对象。任何需要全局暴露给应用程序视图的东西都会在应用程序视图模型中实现为属性,这样我就可以通过绑定来实现它。这使得一个很好的一致访问方法,让我可测试性,实现属性更改通知,给我一个放置应用程序范围命令的地方,以及使用视图模型所期望的所有东西。

每个顶级窗口的数据上下文都设置为应用程序视图模型的实例。所以我不需要乱用资源字典或记住键值。起初听起来有点奇怪 - 为什么两个窗口会使用相同的视图模型? - 但是如果你想在应用程序产生的每个窗口上放置相同的File/Exit命令,这实际上是合乎逻辑的。在这种情况下,窗口的数据上下文被设置为AVM,然后它包含一个面板,其数据上下文被设置为AVM上的属性,该属性是该窗口的实际上下文。只要给窗口元素命名,绑定到AVM上的对象就很简单 - {Binding ElementName=TheWindow, Path=DataContext.TheProperty} - 或者您可以将AVM公开为子视图模型的属性。

AVM模式受到与任何一个对象到规则 - 它们的模式相同的陷阱 - 例如用200个不相关的属性创造一个蹒跚的野兽。解决方案是相同的:将这些属性聚合到服务类中。

通常不会在资源字典中放入任何未在XAML中创建的内容。我可以想到这个一般规则的许多有效例外,但它们还没有在我的程序中出现过。