Для связи между моделями представления вы можете использовать шаблон посредника . Многие платформы приложений WPF, такие как Caliburn.Micro или Prism , предлагают конкретную реализацию этого шаблона, поэтому вам не нужно реализовывать его самостоятельно. Оба они предлагают так называемый агрегатор событий для обмена данными через слабосвязанные события.
Например, в Prism вы должны определить тип события с аргументами события или без них.
// Events derive from PubSubEvent or PubSubEvent<T> if you use event aruments
public class TankChangedEvent : PubSubEvent<TankChangedEventArgs>
{
}
// Event arguments for the above event, uses a property to capture the changed tank
public class TankChangedEventArgs
{
public Tank Tank { get; }
TankChangedEventArgs(Tank tank)
{
Tank = tank;
}
}
Затем в модели представления отправителя вы используете агрегатор событий для публикации sh события. Обратите внимание, что вам необходимо создать или внедрить экземпляр eventAggregator
агрегатора событий.
var args = new TankChangedEventArgs(changedTank);
eventAggregator.GetEvent<PartsDeletedEvent>().Publish(args);
В модели представления-получателя вам необходимо подписаться на событие, например, в конструкторе.
eventAggregator.GetEvent<LogicalDirectoriesChangedEvent>().Subscribe(OnTankChanged);
Создать метод OnTankChanged
для обработки события при его получении.
private void OnLogicalDirectoriesChanged(TankChangedEventArgs args)
{
// Do something with the event arguments
}
Подробнее об этом можно прочитать здесь . Пример в Caliburn Micro можно найти на на этом сайте . Хотя эти механизмы встроены в соответствующие фреймворки, вы также можете использовать их изолированно в своем проекте без миграции всего приложения. Однако есть и другие реализации, но эти фреймворки являются хорошей отправной точкой, поскольку у них есть исчерпывающая документация по ним c.