2011-09-23 108 views
0

因此,我對路由事件的概念很陌生,但是我知道,當字段通過RaiseDataMemberChanging/RaiseDataMemberChanged消息更改時,消息在四處傳播。WCF RIA服務/攔截或訂閱RaiseDataMemberChanging

快速的問題是我如何「聽」這些路由郵件?

我希望我的視圖模型能夠在MVVM中正確地處理,攔截一個消息,即一個字段正在更新,深入到表格的層次結構中。如果在子級(日期範圍)中發生更改,則該日期範圍更改具有與其關聯的一些業務邏輯,從上到下工作。

我知道我可以在更改和更改事件期間使用部分方法來注入代碼,但設計(一對一關係)意味着在孩子的上下文中對孩子的更改沒有參考父母(父母對兒童有一對一的引用,但孩子沒有對父母的引用)。

是的我可以添加孩子的引用給父母(使父母既有一對一,也有一對多的關係),但在實體創建過程中,這會產生一個問題 - 父母必須在子實體存在之前存在,並且在對父代的引用可以存在之前子實體必須存在。這種設計需要插入父母和子女,然後插入子女的更新 - 這會在初始創建過程中混淆WCF RIA服務。

對不起長時間的解釋,但我甚至會考慮設計更改,如果這對任何關心評論的人都有意義。

任何輸入,將不勝感激。

回答

0

我正在使用該實體的PropertyChanged事件的訂閱。過濾掉幾個字段的所有事件似乎有很多工作要做。

使用RX,我希望使用的資源最少,弱者引用避免了在強引用用於處理事件的記憶連桿問題:

 Observable.FromEventPattern<PropertyChangedEventArgs>(this.FlowEntity, "PropertyChanged") 
     .Where(pPropertyChanged => (
           pPropertyChanged.EventArgs.PropertyName.EndsWith("Date")) || 
           pPropertyChanged.EventArgs.PropertyName == "Capacity" 
           ) 
     .Subscribe(pObserver => this.RaiseFlowEntityDateChanged(this, pObserver.EventArgs)); 

FlowEntity是子實體我正在監視父母。然後,我使用父實體引發自定義事件,而不是實際持有該事件的實體。

我無法從部分方法引發此事件,因爲子實體不具有父級上下文。