Silverlight RIA:如何在共享代码上实现更改通知

时间:2011-05-13 12:23:11

标签: silverlight wcf-ria-services inotifypropertychanged

我使用“共享”代码文件扩展了我的域名服务,以便为我的“预订”类添加一个额外的属性,该类从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这样的东西,但似乎已经画了一个空白。

3 个答案:

答案 0 :(得分:2)

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

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

  partial void OnFinishMileageChanged(){
    RaisePropertyChanged("JourneyMileage");
  }

#endif

这应该有效。不要测试它。

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

答案 1 :(得分:1)

您不会更新JourneyMilage属性。当其他字段发生变化时,它会发生变化。

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

修改

See this post

答案 2 :(得分:0)

  

这应该有效。不要测试它。

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

  

另一种方法是,如果您不需要JourneyMileage属性   服务器端,在客户端创建部分“预订”类,   定义你的属性并把我的代码放在没有条件语句的地方   在部分班级。

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

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