【问题标题】:how to split the view to modules in m-v-vm如何将视图拆分为 m-v-vm 中的模块
【发布时间】:2009-07-30 13:14:29
【问题描述】:

我想将我的视图项目拆分为多个模块。 我想要一个主项目,它将引用所有模块,这个主项目将从模块生成视图。

我的问题是如何将应用程序中的所有样式绑定到其他模块?

它会自动识别它们吗?

以及如何定位视图模型模板?因为现在它们在我合并到 app.xaml 中的资源字典中

我应该把它们放在哪里(我希望它们在他们的模块项目中), 如何加载这些资源?

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    好问题。正如 Anderson Imes 所说,您可以使用 Composite WPF,但如果您使用 Managed Extensibility Framework (MEF),最近还有另一个更简单的选项可用。 another question I asked 是关于如何使用 MEF 来做你所说的事情。基本上,它使用 MEF 的可扩展性特性使应用程序资源可扩展,然后您的模块使用它们的 DataTemplates(视图)“扩展”应用程序资源。然后,您只需将您的 ViewModel 添加到您想要的 GUI 中,WPF 会负责将您的 View 应用到它。我一直在这个模型上构建一个应用程序,它运行得非常好。

    使用这种方法的好处是您的 app.xaml 文件不必“了解”您的所有 View 模块,并且您可以随意对应用程序进行切片和切块(我更喜欢分段按功能,然后按层)。

    【讨论】:

    • 我不同意 App.xaml“知道”模块的观点......我们只是允许模块将自己的资源插入到 App.xaml 中。 MEF 是否以某种方式绕过了这个限制(允许模块/插件在不显式引用视图资源中的资源字典的情况下为其控件设置样式)?
    • @Anderson Imes - 是的。如果您有一个 App.xaml 与其他资源字典的合并字典,那么您必须按名称调用其他字典(在编译时)。但是,如果您按照链接问题中的方法进行操作,则模块和插件可以在运行时插入其资源字典。
    • 它仍然只会在 MEF 加载其插件时在运行时将它们全部合并。您在这里获得的是用于将资源字典插入应用程序的声明式与命令式模型。这种方法没有任何编译时间。也就是说,它实际上相当不错。
    • @Anderson Imes - 我相信您正在将 Prism 与我引用的 MEF 方法进行比较。很抱歉……我很困惑。我必须承认我对 Prism 并不是很了解。当我谈论这种方法的“好处”时,我只是将它与问题中提出的方法进行比较(“现在它们在我与 app.xaml 合并的资源字典中”)。
    • 是的,这绝对不错。为了在 Prism 中获得这种效果,我必须经历更多的麻烦。
    【解决方案2】:

    如果你使用 Prism,你想要的很容易实现: http://www.codeplex.com/CompositeWPF

    有很多示例可以帮助您入门。

    您提出的唯一没有被 Prism 回答的问题是 ResourceDictionaries,但有几种方法可以解决这个问题,但我认为这是最好的方法:Composite WPF (Prism) module resource data templates

    第一个答案应该能让你到达那里。您会在模块中失去一点设计时支持,但所有内容都应该在运行时以这种方式正确组合在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      相关资源
      最近更新 更多