Mvvm 模型应该如何发出变化信号?通过活动?通过中介/事件聚合器?通过INPC?

Mvvm 模型应该如何发出变化信号?通过活动?通过中介/事件聚合器?通过INPC?,mvvm,dependency-injection,inotifypropertychanged,mediator,eventaggregator,Mvvm,Dependency Injection,Inotifypropertychanged,Mediator,Eventaggregator,假设在视图中单击一个按钮,ViewModel调用一个异步的、长时间的、艰难的模型计算(根据Wikipedia,模型是业务逻辑和数据)。在此计算过程中,模型会一个接一个地吐出计算结果(这是另一种类型,在这里,可观察到的集合并不有用),视图应该在这些部分结果准备就绪时显示它们 它怎么能做到呢 通过事件聚合器?Caliburn Micro有一个,但这意味着我必须在我的业务逻辑中引用Caliburn Micro——这不可能是正确的,不是吗 通过INPC?我的印象是,无论我在哪里实现INPC,该类都将被绑

假设在视图中单击一个按钮,ViewModel调用一个异步的、长时间的、艰难的模型计算(根据Wikipedia,模型是业务逻辑和数据)。在此计算过程中,模型会一个接一个地吐出计算结果(这是另一种类型,在这里,可观察到的集合并不有用),视图应该在这些部分结果准备就绪时显示它们

它怎么能做到呢

  • 通过事件聚合器?Caliburn Micro有一个,但这意味着我必须在我的业务逻辑中引用Caliburn Micro——这不可能是正确的,不是吗

  • 通过INPC?我的印象是,无论我在哪里实现INPC,该类都将被绑定到。很明显,我不希望一个具有业务逻辑的类向视图公开,这样我就可以绑定到它的一些属性。因此,我需要一个具有单独类(实现INPC)的间接寻址,该类的属性是我根据视图可以绑定到的业务逻辑设置的。现在,我所做的感觉就像创建了一个模型所绑定的ViewModel。-这也不可能是对的!(不公开它,但使用订阅PropertyChanged的ViewModel将其包装起来,感觉就像是对DRY的严重违反)

  • 所以我想我需要使用普通的旧事件?读过MarkSeemans关于DI的书和博客后,我觉得这也是错误的。因为订阅构造函数中的事件是非常困难的。就是反转逻辑,让DI容器向业务模型类中注入一个
    IObserver
    ,该类将对其调用
    Next()
    。这意味着ViewModel可能会实现相当多的
    IObserver
    接口?是这样吗

  • 我需要一些指导,谢谢