如何从WPF应用程序的任何位置引发事件?

时间:2008-11-12 16:21:37

标签: wpf

我有一个基页,BasePage,它会引发一个向用户显示消息的事件。适用于从BasePage派生的所有页面。我想从用户控件执行相同的操作,但它们不从BasePage继承。

我想要的是一个可以从任何地方调用的中心位置,在该代码中它将引发一个事件。放置此代码的好地方在哪里:

    public void DisplayMessage(string message)
    {
        RaiseEvent(new MessageNotificationEventArgs(MessageNotificationEvent, message));
    }

这样我可以从任何地方拨打电话吗? RaiseEvent在UIElement类中,所以它需要去一个UIElement。

2 个答案:

答案 0 :(得分:3)

而不是使用事件来做这件事,你应该使用命令 - 约什史密斯写了一篇很棒的文章:http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/

答案 1 :(得分:3)

问题的一个解决方案是使用Event Aggregator。模式本身与平台无关。

Jeremy Miller有一篇关于构建自己的事件聚合器here的帖子。

但是,Composite WPF(以前称为Prism)执行此操作并针对WPF进行了优化。可以找到详细信息here