Я сделал это с помощью глобального брокера событий.Идея состоит в том, что такие события, как save, которые имеют глобальную область действия, будут проходить через этот класс посредника.
Посредник событий - это одноэлементный объект, в котором каждый класс регистрирует свои обработчики.Обработчик будет зарегистрирован с использованием атрибутов:
[EventSubscribe(EventNames.Save)]
private void OnSaved(GlobalEventArgs args)
{
// do something on saved
}
И каждый объект, который хочет передать себя брокеру, будет делать это так:
EventBroker.Instance.Register(this);
Как это относится к вашим вкладкамвопрос?Проще говоря, когда одна вкладка сохраняется, то это должно вызвать событие save через EventBroker:
EventBroker.Instance.Publish(
EventNames.Save,
new SavedGlobalEventArgs(typeof(YourModel)));
И все остальные ваши вкладки будут обрабатывать событие, такое как это:
[EventSubscribe(EventNames.Save)]
private void OnSaved(GlobalEventArgs args)
{
var savedArgs = (SavedGlobalEventArgs)args;
if(savedArgs.SavedType == typeof(YourModel)
{
this.Model.Refresh();
}
}
Вам все равно придется обрабатывать сохраненное событие на каждой вкладке, которое может потребовать обновления, когда другая вкладка что-то сделала, но это делает код относительно приятным и простым без необходимости помещатьвсе виды вбросов. Можно также расширить его вне события сохранения, сделать некоторые другие глобальные события, которые могут быть полезны:
UserCreated UserLoggedIn SearchInitiated
что угодно;Я не знаю контекст вашего приложения, но брокер - это действительно хороший способ обмена знаниями в среде с вкладками.
Пожалуйста, дайте мне знать, если вы хотите, чтобы я отправил некоторый код:)