在 WPF MVVM Prism 应用程序中使用 OnPropertyChanged 和发布有什么区别?
What's the difference between using OnPropertyChanged and Publishing in a WPF MVVM Prism application?
我正在学习 WPF 应用程序中的 MVVM 模式和 Prism,我对何时只调用 OnPropertyChanged(MyProperty) 以及何时使用 EventAggregator 发布事件感到困惑。第一个不是已经告诉世界 MyProperty 已更改,因此无需调用 MyEvent.Instance.Publish(MyProperty)。还是我完全错过了什么?
internal void OnSequenceSelected(object obj)
{
_currentSequence = obj as Sequence;
Root = DocumentWrapper.Document.Sequences.Single(s => s.Name == _currentSequence.Name).TaskList.ToArray().ToTreeList();
OnPropertyChanged("Root");
LoadedGlobalEvent.Instance.Publish(Root);
}
OnPropertyChanged 是您的 UI 根据 DataBinding 进行更新所必须调用的事件。
Prism的Publish是一个与EventAggregator关联的方法,与MVVM无关。
它只是一种设计模式,当您希望一个对象响应另一个对象的行为而不需要两个对象相互了解时,它在对象(即视图模型)之间提供松耦合。
我自己实现了这个 pub/sub 模式并将其称为 messagebus。
因此,无论 MVVM 概念如何,您都可以使用 EventAggregator 来发布消息。同样,发布消息是您解决方案中完全独立且不相关的部分。
我正在学习 WPF 应用程序中的 MVVM 模式和 Prism,我对何时只调用 OnPropertyChanged(MyProperty) 以及何时使用 EventAggregator 发布事件感到困惑。第一个不是已经告诉世界 MyProperty 已更改,因此无需调用 MyEvent.Instance.Publish(MyProperty)。还是我完全错过了什么?
internal void OnSequenceSelected(object obj)
{
_currentSequence = obj as Sequence;
Root = DocumentWrapper.Document.Sequences.Single(s => s.Name == _currentSequence.Name).TaskList.ToArray().ToTreeList();
OnPropertyChanged("Root");
LoadedGlobalEvent.Instance.Publish(Root);
}
OnPropertyChanged 是您的 UI 根据 DataBinding 进行更新所必须调用的事件。
Prism的Publish是一个与EventAggregator关联的方法,与MVVM无关。 它只是一种设计模式,当您希望一个对象响应另一个对象的行为而不需要两个对象相互了解时,它在对象(即视图模型)之间提供松耦合。
我自己实现了这个 pub/sub 模式并将其称为 messagebus。
因此,无论 MVVM 概念如何,您都可以使用 EventAggregator 来发布消息。同样,发布消息是您解决方案中完全独立且不相关的部分。