我的一个视图包含一个下拉菜单。进行选择时,必须使其视图模型和程序中的所有其他视图模型知道更改,以便它们可以更新其视图。目前,每个视图模型都包含自己的选择副本,当它被更改时,我有手动更新它们(我在每个上面都有一个公共刷新(int newVal)。有没有更好的方法
一种可能的方法可能是使用事件聚合器。聚合器用于在发布者和接收方之间调度消息。
需要发送消息的对象向EventAggregator
注册消息类型,需要接收的对象也在EventAggregator
订阅它们。
有很多方法可以实现这一点,我建议使用您选择的任何 MVVM 框架。最常见的框架都提供了经过时间验证的实现。
一个例子是Caliburn Micro。CM框架已经为此提供了EventAgregator
类。
请参阅此处的示例:使用 Caliburn.Micro 的 EventAggregator 进行消息传递简介。
事件聚合器并通过它发布一个事件,该事件可以由每个视图模型处理(也许在某种基类中?)。
使用(聚合)事件。
在加载视图时订阅事件,在卸载视图时取消订阅,并确保在加载视图模型时初始化视图模型中的变量。然后在选择更改时发布事件(将新数据作为参数传递)。