У меня есть графический интерфейс C# WPF в ProjectA. Я поднимаю событие в ProjectA и хочу подписаться/ответить на это событие из ProjectB, который является dll, который ничего не знает о ProjectA. ProjectA имеет ссылки на объекты в ProjectB, но не наоборот.Как подписаться на событие C# GUI из ProjectA в dll в ProjectB
Например, пользователь нажимает кнопку в ProjectA. Внутри обработчика button_Click() ProjectA он вызывает UserClickedButtonX (это, e). ProjectB должен подписаться на UserClickedButtonEvent и обрабатывать его, когда событие поднято.
Код ниже не работает, поскольку ProjectB не знает о «MainWindow» в ProjectA. Заранее спасибо!
In ProjectA (Mainwindow.xaml.cs):
private void buttonX_Click(object sender, RoutedEventArgs e) {
OnUserClickedButtonXEvent(new EventArgs());
}
public static event UserClickedButtonXEventHandler UserClickedButtonXEvent;
public virtual void OnUserClickedButtonXEvent(EventArgs e) {
if (UserClickedButtonXEvent!= null)
UserClickedButtonXEvent(this, e);
}
In Project B (dll):
MainWindow.UserClickedButtonXEvent+= new UserClickedButtonXEventHandler(UserClickedButtonXFunction);
void UserClickedButtonXFunction(object source, EventArgs e) {
Console.WriteLine("User clicked Button X on the GUI in another project!");
}
Рассмотрите решение, предложенное @ScottNimrod, но не используйте его реализацию «EventAggregator». Возьмите «EventAggragator» Prism и «PubSubEvent». Подробнее [здесь] (http://compositewpf.codeplex.com/). – dymanoid
Чувак, почему бы не просто расширить пример, который я предоставил при необходимости? –