2011-05-13 45 views
1

我已经使用“共享”代码文件扩展了我的域服务,以将额外属性添加到我的“预订”类中,该计算类按照以下方式计算StartMileage和FinishMileage的里程:Silverlight RIA:我如何在我的共享代码上实现更改通知

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这样的东西,但似乎画了一个空白。

回答

2

添加到您的共享舱位条件的Silverlight代码块这样的。

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

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

#endif 

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

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

1

您不更新JourneyMilage属性。当其他领域改变时它会改变。

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

编辑

See this post

+0

去哪里执行INotifyPropertyChanged?它在域服务元数据文件上吗? – Calanus 2011-05-13 12:41:23

+0

请参阅我的答案中的编辑 – 2011-05-13 12:45:55

0

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

1)如果您需要属性更改通知,则不会使用Silverlight进行编译。在客户端生成的共享类是从另一个命名空间(在SL其他.dll文件),并有提高其他财产的方法签名:-(改变

另一种方式是,如果你鸵鸟政策需要JourneyMileage财产在 服务器端,要建立在客户端的部分“预订”类, 定义你的财产,并把我的代码没有条件语句 在部分类。

2)这将工作和可能是一个合理的解决方案,但是你不能与EDM共享业务逻辑:-(

3)另一个解决方案可能是将属性添加到具有[DataMember]属性的生成元数据类。缺点(或者在某些使用情况下是有利的)是,改变这种属性会将上下文设置为已更改。