WCF RIA服务/拦截或订阅RaiseDataMemberChanging

时间:2011-09-23 16:58:16

标签: wcf-ria-services routed-events

所以我对路由事件的概念不熟悉,但我知道当字段通过RaiseDataMemberChanging / RaiseDataMemberChanged消息更改时,消息随处可见。

快速问题是如何“收听”这些路由消息?

我希望我的视图模型,在MVVM正确的事情中,拦截一个字段正在更新的消息,深入到表的层次结构中。如果子项(日期范围)发生更改,则该日期范围更改具有与之关联的一些业务逻辑,从上到下。

我知道我可以使用部分方法在更改和更改事件期间注入代码,但设计(一对一关系)意味着在子项的上下文中对子项的更改没有引用父级(父级对子级具有一对一引用,但子级没有父级引用)。

是的我可以将子项的引用添加到父项(使父项具有一对一,以及一对多的关系),但在创建实体期间,这会产生问题 - 父在子实体存在之前存在,并且子实体必须存在才能存在对父实体的引用。这种设计需要插入父项和子项,然后更新子项 - 这会在初始创建过程中混淆WCF RIA服务。

对于长篇大论的解释感到抱歉,但如果对所有关心评论的人都有意义,我甚至会考虑设计变更。

任何意见都会受到赞赏。

1 个答案:

答案 0 :(得分: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是我从父级监控的子实体。然后我使用父实体来提升自定义事件,而不是实际持有事件的实体。

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