2011-09-23 88 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是子实体我正在监视父母。然后,我使用父实体引发自定义事件,而不是实际持有该事件的实体。

我无法从部分方法引发此事件,因为子实体不具有父级上下文。