【问题标题】:Silverlight RIA: How do I implement change notification on my shared codeSilverlight RIA:如何在我的共享代码上实现更改通知
【发布时间】:2011-05-13 12:23:10
【问题描述】:

我已使用“共享”代码文件扩展了我的域服务,以向我的“预订”类添加一个附加属性,该属性从 StartMileage 和 FinishMileage 计算里程,如下所示:

 public int? JourneyMileage
        {
            get
            {
                if (StartMileage.HasValue && FinishMileage.HasValue)
                {
                    return (FinishMileage - StartMileage);
                }
                else
                {
                    return null;
                }
            }
        }

StartMileage 和 FinishMileage 是我自动生成的域服务中的属性。 JourneyMileage 属性绑定到 UI,StartMileage 和 FinishMileage 也是如此。

当 StartMileage 或 FinishMileage 发生更改时,如何更新 JourneyMileage 属性(以及 UI)?我一直在寻找 NotifyPropertyChanged 之类的东西,但似乎画了一个空白。

【问题讨论】:

    标签: silverlight wcf-ria-services inotifypropertychanged


    【解决方案1】:

    向您的共享 Booking 类添加一个像这样的条件 silverlight 代码块。

    #if SILVERLIGHT
      partial void OnStartMileageChanged(){
        RaisePropertyChanged("JourneyMileage");
      }
    
      partial void OnFinishMileageChanged(){
        RaisePropertyChanged("JourneyMileage");
      }
    
    #endif
    

    这应该可行。不要测试它。

    另一种方法是,如果您不需要服务器端的 JourneyMileage 属性,请在客户端创建一个部分“预订”类,定义您的属性并将我的代码放入部分类中而不使用条件语句。

    【讨论】:

      【解决方案2】:

      您不会更新 JourneyMilage 属性。它会随着其他字段的变化而变化。

      如果您想通知其他人其值已更改,请实现 INotifyPropertyChanged 并在 StartMilage 或 FinishMilage 更改时也为 JourneyMilage 引发 PropertyChanged 事件。

      编辑

      See this post

      【讨论】:

      • 我在哪里实施 INotifyPropertyChanged?是否在 domainservice 元数据文件中?
      【解决方案3】:

      这应该可行。不要测试它。

      1) 如果您需要属性更改通知,则不会使用 Silverlight 进行编译。客户端生成的共享类来自另一个命名空间(SL 中的其他 .dll),并且具有用于提升属性的其他方法签名已更改:-(

      另一种方法是,如果您不需要 JourneyMileage 属性 服务器端,在客户端创建部分“预订”类, 定义您的财产并在没有条件语句的情况下放置我的代码 在部分类中。

      2) 这将起作用并且可能是一个合理的解决方案,但是您不能与 EDM 共享业务逻辑:-(

      3) 另一种解决方案是使用 [DataMember] 属性将属性添加到生成的元数据类。缺点(或在某些用例中的优点)是更改此类属性会将上下文设置为已更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-08
        • 2017-05-11
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多