【问题标题】:WCF RIA Services / intercept or subscribe to a RaiseDataMemberChangingWCF RIA 服务/拦截或订阅 RaiseDataMemberChanging
【发布时间】:2011-09-23 16:58:15
【问题描述】:

所以我是路由事件概念的新手,但我知道当字段通过 RaiseDataMemberChanging / RaiseDataMemberChanged 消息发生变化时,消息会到处飞。

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

我希望我的视图模型在正确的 MVVM 问题中截获字段正在更新的消息,深入到表的层次结构中。如果子项(日期范围)发生更改,则该日期范围更改具有与之关联的一些业务逻辑,这些逻辑自上而下地起作用。

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

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

很抱歉解释冗长,但如果这对任何愿意发表评论的人都有意义,我什至会考虑更改设计。

我们将不胜感激。

【问题讨论】:

    标签: wcf-ria-services routed-events


    【解决方案1】:

    我正在订阅相关实体的 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 是我从父级监控的子级实体。然后我使用父实体而不是实际持有事件的实体引发自定义事件。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多