2013-04-05 62 views
0

我继承它使用视图-第一MVVMC百通重用WPF MVVM视图

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

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

Create Person Views

这些视图/视图模型大火得到由主视图处理的事件。

我也有一个编辑视图,我想重新使用选择组视图。

Edit Person Views

我可以通过订阅的EditPersonMaster视图模型相应的事件做到这一点。

我的问题确实是,这是做到这一点的适当方式?因为我使用松散耦合的事件,如果在创建/重新分配时发生错误,我不会收到子视图/视图模型的任何反馈?我可能会为内部视图/模型启动另一个“ErrorBlah”事件来处理和更新视图。

是否有另一种方法可以做到这一点?复合命令似乎不适合账单,但也许我不正确地理解它们。

回答

0

下面是我如何理解你的问题:你有人存储在一个数据库,其中有一个属性/列group。在你的用户界面中,你想创建人员并分配组属性。另外,您希望能够编辑不同地区/页面/主页中现有人员的组属性。您想要重新使用控件来分配组。你的控件触发一个事件,这是由主人处理的一种方式,它创建数据库中的条目(是否正确?)。你的问题是这是否是一个好方法,你有什么替代方案?

我看到两个选项:

1.组件化的业务逻辑:

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

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

如果您想坚持您的架构,请将Singleton Model注入到ViewModels中。在模型中管理你的状态并让ViewModel选择他们想要提供给他们视图的作品。

希望我得到了他的意见,虽然...