我有一个基页,BasePage,它会引发一个向用户显示消息的事件。适用于从BasePage派生的所有页面。我想从用户控件执行相同的操作,但它们不从BasePage继承。
我想要的是一个可以从任何地方调用的中心位置,在该代码中它将引发一个事件。放置此代码的好地方在哪里:
public void DisplayMessage(string message)
{
RaiseEvent(new MessageNotificationEventArgs(MessageNotificationEvent, message));
}
这样我可以从任何地方拨打电话吗? RaiseEvent在UIElement类中,所以它需要去一个UIElement。
答案 0 :(得分:3)
而不是使用事件来做这件事,你应该使用命令 - 约什史密斯写了一篇很棒的文章:http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/
答案 1 :(得分:3)
问题的一个解决方案是使用Event Aggregator。模式本身与平台无关。
Jeremy Miller有一篇关于构建自己的事件聚合器here的帖子。
但是,Composite WPF(以前称为Prism)执行此操作并针对WPF进行了优化。可以找到详细信息here。