Я думаю, вам следует использовать шаблон-посредник , о котором вы можете прочитать здесь .
По сути, это статический класс, который позволяет ViewModels (или любому другому классу) взаимодействовать друг с другом и передавать аргументы туда и обратно.
В основном ViewModel A начинает прослушивание определенного типа сообщения (например, ViewModelBChanged), и всякий раз, когда происходит это событие, ViewModelB просто уведомляет любого, кто прослушивает этот тип сообщения, он также может передавать любую информацию, которую хочет.
Вот скелет посредника.
public static class MyMediator
{
public static void Register(Action<object> callback, string message);
public static void NotifyColleagues(string message, object args);
}
ViewModel A сделает это (вероятно, в конструкторе):
MyMediator.Register(ProcessMessage,"ViewModelBChanged")
и затем должен был бы объявить такую функцию:
void ProcessMessage(object args)
{
//Do some important stuff here
}
и ViewModel B будет вызывать это всякий раз, когда захочет сообщить ViewModel A
MyMediator.NotifyColleagues("ViewModelBChanged",this);
Класс-посредник будет отвечать за вызов функции обратного вызова viewModel A. И тогда все будут счастливы.
Лично мне нравится помещать эти строковые значения сообщений в статический класс, подобный этому
static class MediatorMessages
{
public static string ViewModelBChanged= "ViewModelBChanged";
}
Чтобы вы могли сделать следующее (вместо вышеописанного):
MyMediator.Register(ProcessMessage,MediatorMessages.ViewModelBChanged)
MyMediator.NotifyColleagues(MediatorMessages.ViewModelBChanged,this);
Если это неясно, просто воспользуйтесь посредником Google MVVM и кликните на понравившийся контент:)