【问题标题】:Reusing WPF MVVM Views重用 WPF MVVM 视图
【发布时间】:2013-04-05 15:01:31
【问题描述】:

我继承了一个使用视图优先的 MVVMC 模式的应用程序

在应用程序中,我创建了两步流程,创建一个人并将他们分配给一个组。为此,我创建了一个名为 CreatePersonMaster 的视图和相应的视图模型(所有视图与视图模型具有 1-2-1 关系,视图模型被注入到 View 构造函数中,并使用 TransientLifetimeManager 向 Unity 容器注册) ,视图只包含一个区域(由虚线显示),子视图可以加载到该区域中,并且视图模型订阅两个松散耦合的事件,“PersonCreated”和“GroupSelected”。 “PersonCreated”事件将 Person 实体保存在字段中,“GroupSelected”事件获取保存的 Person,创建组关联并将它们保存到数据库。

在引发事件之前,此视图/视图模型不会执行任何操作,因此我将以下子视图加载到我的区域中。

这些视图/视图模型触发由主视图处理的事件。

我还有一个编辑视图,我想在其中重复使用选择组视图。

我可以通过订阅 EditPersonMaster 视图模型中的适当事件来做到这一点。

我的问题确实是,这是执行此操作的适当方法吗?因为我使用的是松散耦合的事件,所以如果在创建/重新分配时出现错误,我不会在子视图/视图模型中得到任何反馈?我可能会为内部视图/模型触发另一个“ErrorBlah”事件来处理和更新视图。

还有其他方法可以做到这一点吗?复合命令似乎不符合要求,但也许我没有正确理解它们。

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    我是这样理解您的问题的:您将人员存储在数据库中,该数据库具有属性/列group。在您的 UI 中,您想要创建人员并分配组属性。此外,您希望能够编辑不同区域/页面/母版中现有人员的组属性。您想重复使用该控件来分配组。您的控件触发一个事件,该事件由 Master 以在数据库中创建条目的方式处理(正确吗?)。您的问题是这是否是一种好方法以及您有哪些替代方法?

    我看到两个选项:

    1.模块化您的业务逻辑:

    您可以将数据服务注入到您的 ViewModel 中,它可以直接访问数据库。这样,您可以直接在错误发生的地方处理错误等,而不必将它们传递给整个系统。如果您想通知其他模块数据库的更改(指定更改的数据集等),您可以使用复合事件来执行此操作。我认为 PRISM 模块更像是完整的元素,包括 UI 和业务逻辑,并尽可能少地保持它们之间的通信。

    2。保持您的业务逻辑为中心并共享它:

    如果您想坚持自己的架构,请将单例模型注入到 ViewModel 中。在模型中管理您的状态并让 ViewModel 选择他们想要提供给他们的视图的部分。

    但希望我明白他的意思...

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2013-07-07
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      相关资源
      最近更新 更多