2010-03-09 89 views
1

我希望得到一些指導。我有一個包含窗口(Window1)和頁面(Page1)的wpf應用程序。該頁面在窗口內使用框架。將值從WPF頁面傳遞到其父窗口

我在頁面中有一個按鈕,我希望能夠按下並將字符串值傳回到mainwindow並將其顯示在標籤中。

任何人都可以幫助一個基本的例子,因爲我不知道!

回答

0

一般來說,它聽起來像你需要在你的應用程序中的某種發佈者/訂閱者模式事件服務。這將是您的外部窗口可以訂閱的Singleton對象。這項服務的一般呼叫可能看起來像:

EventService.Instance.AddListener("TheEventICareAbout" 
      , delegate(possiblySomeParameters) { 
       //Do Interesting Stuff Here. This code can access members of your 
       //window class or call methods on it to react to the event. 
       }) ; 

然後你的孩子頁面可能提高了一些服務活動:

EventService.Instance.RaiseEvent("TheEventICareAbout" 
      , new EventParameters(possiblySomeParameters)) ; 

內部,該服務可能只是一個事件名稱的字典,並框架event s。您的AddListener將檢查事件名稱是否已經存在,如果有,請將新代理添加到event。如果不是,它將在字典中創建一個新條目並存儲新代表,如event中所示。

大多數應用程序框架在某個時候使用了這種模式,所以我確信如果你不想編寫自己的應用程序,有很多選擇。看看Prism Event Aggregator。 This is a short introduction,但基本格式將保持不變,無論您自己編寫它還是如果您抓取預先存在的解決方案。

這種方法的基本優點是鬆耦合和可擴展性。它也適合MVVM架構,您的ViewModel可以引發其他ViewModel響應的事件。這可以讓您將業務邏輯從視圖中取出並放到可以更完整地進行測試的位置。

雖然我不會推薦它,但「快速和骯髒」解決方案的另一種選擇是向頁面添加事件並讓窗口爲其添加處理程序。頁面然後可以引發這個自定義事件。在這裏你要小心的是垃圾收集(如果你沒有正確地移除處理程序,你的頁面可能不會得到GC),並確保你不會收到很多頁面,每個頁面都會引發一個稍微不同的事件。

相關問題