我正在构建一个 WPF 应用程序并计划使用 PRISM 模式库。几乎我所有的视图都将显示或修改列表。我应该把这个对象放在哪里,我应该如何将它提供给我的视图。我是否应该只有一个模块,在该对象的列表中创建对象,然后在创建视图时将对象提供给视图,然后再将它们注入各个区域?或者有更好的方法吗?
2 回答
- 您只需要一个模块。模块的思想是将应用程序的不同部分分开,例如订单管理和客户管理。
- 遵循 MVVM 术语,列表就是您的模型。只需将其命名为 ListModel。此 ListModel 应包含一个视图模型。这可以命名为 ListViewModel
- 所有视图都有一个视图对应的视图模型。这些视图模型都引用了 ListViewModel。ListViewModel 通过属性提供给视图,因此视图可以使用绑定路径 DataContext.ListViewModel 引用 ListViewModel。当您的视图都绑定到您的视图模型时,当您的模型充满数据时就无关紧要了。
Prism 是一个非常有用的模式库,对于您正在尝试做的事情。我建议你看看这里http://compositewpf.codeplex.com/你可以找到很多关于 Prism 和 MVVM 架构的答案。您可以定义尽可能多的模块,但如果视图类似于显示和修改列表,最好的方法是识别从一个视图到另一个视图的变化。例如,绑定或属性或标签名称以及从模板 T4 生成这些不同的视图(或者即使您想一一重新定义它们)它将是一个相同的模块,但具有不同的绑定。
如果您想在多个视图模型之间共享信息(无论它们在哪个区域/模块中),您可以实现一个共享服务,该服务存储单个列表集合并将该服务注入每个视图模型中。然后,让每个视图模型通过服务访问集合中的数据,这样当对集合执行 CRUD 操作时,更改将反映在所有视图模型中,然后您可以提供所有视图。
如果您要使用该共享服务并将其导出为非共享导出,则您的 ObjectRepository 的同一实例将在所有视图模型之间共享。在您的服务中更新 List 属性时,您可以让所有视图模型都使用它。如果您将使用统一,请使用单例实例。
有关共享服务的更多详细信息http://msdn.microsoft.com/en-us/library/ff921122%28v=PandP.40%29.aspx#sec7