我使用“共享”代码文件扩展了我的域名服务,以便为我的“预订”类添加一个额外的属性,该类从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这样的东西,但似乎已经画了一个空白。
答案 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事件。
修改强>
答案 2 :(得分:0)
这应该有效。不要测试它。
1)如果您需要更改属性通知,则不会使用Silverlight进行编译。客户端生成的共享类来自另一个名称空间(SL中的其他.dll),并且还有其他方法签名用于引发属性更改: - (
另一种方法是,如果您不需要JourneyMileage属性 服务器端,在客户端创建部分“预订”类, 定义你的属性并把我的代码放在没有条件语句的地方 在部分班级。
2)这将起作用并且可能是一个合理的解决方案,但是您无法与EDM共享业务逻辑: - (
3)另一个解决方案是使用[DataMember]属性将属性添加到生成的元数据类。缺点(或在某些用例中有利)是更改此类属性会将上下文设置为已更改。