2011-05-13 62 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]屬性的生成元數據類。缺點(或者在某些使用情況下是有利的)是,改變這種屬性會將上下文設置爲已更改。