0

我的一个观点包含一个下拉菜单。当做出选择时,它的视图模型和程序中的所有其他视图模型必须知道更改,以便他们可以更新他们的视图。目前,每个视图模型都包含自己的选择副本,当它被更改时,我必须手动更新它们(我每个都有一个公共 Refresh(int newVal) )。有没有更好的方法来做到这一点?

4

3 回答 3

1

您可以使用事件聚合器并通过它发布可以由每个视图模型处理的事件(可能在某种基类中?)。

于 2012-11-27T10:05:33.570 回答
1

使用(聚合)事件。

加载视图时订阅事件,卸载视图时取消订阅,并确保在加载视图模型时初始化视图模型中的变量。然后在选择更改时发布事件(将新数据作为参数传递)。

于 2012-11-27T10:07:09.077 回答
1

一种可能的方法可能是使用事件聚合器。聚合器用于在发布者和接收者之间分派消息。

需要发送消息的对象在 中注册消息类型EventAggregator,需要接收的对象也在 中订阅它们EventAggregator

有很多方法可以实现这一点,我建议使用您选择的任何 MVVM 框架。最常见的框架提供了经过时间验证的实现。

一个例子是Caliburn Micro。CM 框架已经EventAgregator为此提供了类。

请参阅此处的示例:使用 Caliburn.Micro 的 EventAggregator 进行消息传递简介

于 2012-11-27T10:18:40.833 回答