Я бы посмотрел на использование фреймворка, чтобы помочь вам здесь. Мой любимый Prism v4 .
Если вы будете следовать шаблону проектирования M-V-VM , ваша жизнь станет намного проще. Вам нужно понимать привязку данных и DataContext .
При этом, если вы решите пойти по этому пути, вы можете привязать каждое из ваших окон к команде:
<Button Command="{Binding DoFooCommand}" Content="DoFoo"/>
Ваш ViewModel должен был бы выполнить DelegateCommand член.
public class SomeViewModel : NotificationObject
{
public SomeViewModel()
{
DoFooCommand = new DelegateCommand(ExecuteFoo);
}
public DelegateCommand DoFooCommand { get; set; }
private void ExecuteFoo()
{
//Use the EventAggregator to publish a common event
}
}
И, наконец, где-то еще в вашем решении у вас будет файл / класс кода, который подписывается на событие и ждет, пока кто-нибудь опубликует событие, чтобы обработать его.
public class SomeOtherPlace
{
public SomeOtherPlace()
{
//Use the EventAggregator to subscribe to the common event
}
public void FooBarMethodToCallWhenEventIsPublished(SomePayload payload)
{
//Do whatever you need to do here...
}
}
Я понимаю, что некоторые вещи были опущены (например, что такое SomePayload ... посмотрите информацию о EventAggregator), но я не хотел вдаваться в подробности. Просто дайте вам руководство о том, куда обращаться за информацией, и некоторый базовый код для работы. Если вы решите использовать EventAggregator, то вам нужно убедиться, что ваш подписывающий вызов и публикуемые вызовы используют тот же экземпляр EventAggregator. Вы можете сделать это, посмотрев на MEF . Призма настроена на идеальную работу с MEF ... Я не собираюсь лгать. Выполнение всего этого требует некоторой кривой обучения, но в конечном итоге это будет полезно, когда вы сможете легко тестировать свои модели ViewModel и свободно связывать свой код. EventAggregator - отличный способ для разных классов общаться друг с другом, не полагаясь на знание друг друга. А MEF отлично подходит для того, чтобы иметь Контейнер для ваших сервисов, который вы хотите использовать в своем приложении.
Надеюсь, что это дало вам некоторое представление о том, как делать то, что вы хотите делать на правильном пути.