In my WPF application, I have several models and viewmodels. Consider an example:
The SurfaceCondition property of my RoadViewmodel changes. I want this to (asynchronously) trigger a change of the Wheel property of my CarViewmodel.
I can think of several solutions, but I sense this particular problem has a well-recognized solution. Using messages? Putting a reference in the RoadViewmodel to the CarViewmodel and trigger an update through the property? Merging the viewmodels? WPF gurus out there, please enlighten me!
Definitely not the two last solutions you propose as they violate Seperation Of Concerns (RoadViewModel knowing about CarViewModel) / DRY principles (RoadViewModel having to update CarViewModel or merging two classes).
Messages on the other hand seems like a fine, decoupled solution here. There are a couple of implementations available, for example Prism has en
EventAggregatorclass, MVVM Toolkit hasMessageBusetc. Or search for terms like ‘MVVM event bus’. Now whatever you choose, know that it is always good to not use those classes directly but instead pass an interface. For example with Prism, you’d program your viewmodels to use theIEventAggregatorinterface only. In the actual application you pass them an instance of the actual EventAggregator, whereas during unit tests you pass the a mock.