2008-11-12 44 views
2

我有一個基頁,BasePage,引發向用戶顯示消息的事件。在源自BasePage的所有頁面上都很好用。我想從用戶控件執行相同的操作,但它們不從BasePage繼承。如何從我的WPF應用程序的任何位置提起事件?

我想要的是一箇中心位置,我可以從任何地方撥打電話,並在該代碼中提出事件。哪裏是放這個代碼的好地方:

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

這樣我就可以從任何地方打電話給它? RaiseEvent在UIElement類中,所以它需要去一個屬於UIElement的地方。

回答

3

而不是使用事件,要做到這一點,你應該使用指揮 - 約什 - 史密斯寫了這個偉大的文章:http://joshsmithonwpf.wordpress.com/2008/03/18/understanding-routed-commands/

+0

除此之外,在一個非平凡的應用程序中,這僅僅是不夠的。並非所有的東西都在同一個可視化樹中,在這種情況下,命令將不起作用。它們只是該問題的部分解決方案,並不是用於應用程序中任意組件之間通信的充分機制。克里斯的答案是更好的方法。 – 2011-10-22 23:53:27

3

一個問題的解決方案是使用Event Aggregator。該模式本身是平臺獨立的。

Jeremy Miller有關於構建您自己的事件聚合器here的文章。

但是,Composite WPF(以前稱爲Prism)可以做到這一點,並且它已針對WPF進行了優化。具體可以找到here

相關問題