Я бы использовал для этого Призма .
Вот пример:
Класс, который вызовет событие:
public class MainViewModel
{
public void UpdateName(string name)
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Publish(name);
}
}
Два класса подпишутся на это событие:
public class Child1ViewModel
{
public string Name { get; set; }
public Child1ViewModel()
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName);
}
private void UpdateName(string name)
{
this.Name = name;
}
}
и
public class Child2ViewModel
{
public string Name { get; set; }
public Child2ViewModel()
{
Utility.EventAggregator.GetEvent<UpdateNameEvent>().Subscribe(UpdateName);
}
private void UpdateName(string name)
{
this.Name = name;
}
}
EventAggregator, который является частью Prism. События находятся здесь:
public class Utility
{
public static EventAggregator EventAggregator { get; set; }
static Utility()
{
EventAggregator = new EventAggregator();
}
}
И событие просто определяется следующим образом:
public class UpdateNameEvent : PubSubEvent<string>
{
}
Теперь попробуйте:
static void Main(string[] args)
{
MainViewModel mainViewModel = new MainViewModel();
Child1ViewModel child1 = new Child1ViewModel();
Child2ViewModel child2 = new Child2ViewModel();
mainViewModel.UpdateName("Name1");
Console.WriteLine(child1.Name);
Console.WriteLine(child2.Name);
}
ДляВ этом примере я использую консольное приложение.быстрее и строковый параметр, но вы можете заменить его в соответствии с вашими потребностями.Будь то подход MVVM или любой другой шаблон, вы можете легко реализовать этот тип связи.
Установите Prism.Core с помощью Nuget, и вы получите ссылку на Prism dll.
Еще раз: MainViewModel опубликует событие, и оба потомка будут подписаться на это событие.
Вот и все.