【发布时间】:2009-07-30 13:14:29
【问题描述】:
我想将我的视图项目拆分为多个模块。 我想要一个主项目,它将引用所有模块,这个主项目将从模块生成视图。
我的问题是如何将应用程序中的所有样式绑定到其他模块?
它会自动识别它们吗?
以及如何定位视图模型模板?因为现在它们在我合并到 app.xaml 中的资源字典中
我应该把它们放在哪里(我希望它们在他们的模块项目中), 如何加载这些资源?
【问题讨论】:
我想将我的视图项目拆分为多个模块。 我想要一个主项目,它将引用所有模块,这个主项目将从模块生成视图。
我的问题是如何将应用程序中的所有样式绑定到其他模块?
它会自动识别它们吗?
以及如何定位视图模型模板?因为现在它们在我合并到 app.xaml 中的资源字典中
我应该把它们放在哪里(我希望它们在他们的模块项目中), 如何加载这些资源?
【问题讨论】:
好问题。正如 Anderson Imes 所说,您可以使用 Composite WPF,但如果您使用 Managed Extensibility Framework (MEF),最近还有另一个更简单的选项可用。 another question I asked 是关于如何使用 MEF 来做你所说的事情。基本上,它使用 MEF 的可扩展性特性使应用程序资源可扩展,然后您的模块使用它们的 DataTemplates(视图)“扩展”应用程序资源。然后,您只需将您的 ViewModel 添加到您想要的 GUI 中,WPF 会负责将您的 View 应用到它。我一直在这个模型上构建一个应用程序,它运行得非常好。
使用这种方法的好处是您的 app.xaml 文件不必“了解”您的所有 View 模块,并且您可以随意对应用程序进行切片和切块(我更喜欢分段按功能,然后按层)。
【讨论】:
如果你使用 Prism,你想要的很容易实现: http://www.codeplex.com/CompositeWPF
有很多示例可以帮助您入门。
您提出的唯一没有被 Prism 回答的问题是 ResourceDictionaries,但有几种方法可以解决这个问题,但我认为这是最好的方法:Composite WPF (Prism) module resource data templates
第一个答案应该能让你到达那里。您会在模块中失去一点设计时支持,但所有内容都应该在运行时以这种方式正确组合在一起。
【讨论】: