2012-10-30 40 views
0

想象一下,你有Listener類,它將app start上的Connect方法連接到某個服務器,然後它開始收聽消息,並在每次收到的消息中引發事件OnRecievedMessage。基於這些消息,您需要更新viewmodels,然後更新視圖。更重要的是你必須在新線程上運行Listen()方法,以便不會阻塞UI,所以事件OnRecievedMessage也會在這個新線程上運行。如何在WPF/MVVM模式中包含Listener類型類?

如何將這樣的類合併到WPF/MVVM應用程序的結構中以及如何將它與viewmodel連接起來?

回答

1

在這種情況下我不會用一個事件 - 我會暴露IObservable<T> 因爲的IObservable將是一個對象,並可以很容易地傳遞和返回到/從功能您將獲得:

  • 輕鬆地將這個到您的視圖模型
  • 過濾器/映射和調度到UI線程
  • 脫鉤處理程序更容易(與處置 「 - =」)

所以不要傳遞你的「Listener」類 - 傳遞你實現的IObservable /在那裏展示!

確保有看看Rx-Framework

+0

THX,我會看這個框架內,但現在如果我必須使用事件,因爲它僅僅是類可以對收到的消息,我回應的方式無法訪問代碼來改變其行爲 – sanjuro

+0

您可以將事件包裝到IObservable中...因此np。如果你不能更改監聽器 - 只需創建一個包裝器 – Carsten

+0

,這樣偵聽器應該被包裝在iobservable類中,而viewmodel應該實現iobserver?這樣,這讓我感覺很好。 – sanjuro

相關問題