0

假设我有 2 个实现 INotifyPropertyChanged 的​​ VM 类(在这种情况下是 Prism NotificationObject),并且我希望一个 VM 响应另一个 VM 中的属性更改?

假设这些都是子虚拟机作为父虚拟机上的属性,有哪些方法可以在不使用事件聚合器/调解器的情况下将它们从父虚拟机连接起来?

我计划让监听 VM 公开的 ICommand(PRISM DelegateCommand)通过父 VM 连接到另一个 VM 的 PropertyChanged 事件。

首先,这是一种可接受的方式吗?其次,如何将 ICommand 连接到事件?我是否必须使用附加行为,例如编程 EventToCommand 或类似行为,还是有更直接的方法来做到这一点?

其次,在 MVVM 的哲学中,这是一种可接受的方式吗?

4

1 回答 1

3

它更直接——因为您的事件侦听器具有对目标类的完全访问权限,您可以直接调用方法/命令。

sourceVM.PropertyChanged += (sender, args) => {
    if (args.PropertyName.Equals("Property to listen for"))
    {
        targetVM.Method();
    }
};

或者,如果目标需要是一个ICommand而不是常规方法,那么请targetVM.Command.Execute(null);改用。

我还建议在您的源类中创建一个自定义事件,这样您就不会依赖OnPropertyChanged属性名称“魔术字符串”。


就 MVVM 和良好设计的理念而言,我认为它确实有些偏离,因为现在你的两个视图模型耦合得更紧密了。这并不是说这种方法一定不好,但看起来 Prism 的事件聚合器可能是一个更好的选择。

于 2012-11-14T01:09:32.583 回答