2017-03-14 82 views
0

假設在C#WPF類的變化等相關的財產我有這樣的事情:如何更新一個屬性

class test: INotifyPropertyChanged 
{ 
    private datetime _DOB 
    public datetime DOB 
    { 
     get 
     { 
      return _DOB; 
     } 
     set 
     { 
      if (_DOB != value) 
      { 
       _DOB = value; 
       RaisePropertyChanged(); 
      } 
     } 
    } 

    private int _age 
    public int Age 
    { 
     get 
     { 
      return _age; 
     } 
     set 
     { 
      if (_age != value) 
      { 
       _age = value; 
       RaisePropertyChanged(); 
      } 
     } 
    } 
.... 

} 

現在,讓我們假設一個用戶可以把任何屬性。他們可以投入他們的DOB或他們的年齡,因此使他們中的一個計算出來的財產不起作用。

除了使用在年齡的設定器DOB和UpdateDOB()的設定器等UpdateAge()方法,有將自動與依賴屬性(其INPC需要照顧)沿着更新「從屬」屬性的任何其它方法?

+0

這將在計算性能的情況下一定的幫助,但不是在我的情況。 –

回答

1

是否有任何其他方法會自動更新「依賴」屬性以及依賴項屬性(INPC需要照顧)?

這裏沒有「自動」或魔法。您需要設置支持字段併爲要在視圖中刷新的數據綁定屬性引發PropertyChanged事件。

只要確保最終不會陷入無限循環,即從DOB屬性中設置Age屬性,反之亦然。

您可以設置_ age支持字段在DOB屬性,反之亦然的制定者,例如:

private DateTime _DOB; 
public DateTime DOB 
{ 
    get 
    { 
     return _DOB; 
    } 
    set 
    { 
     if (_DOB != value) 
     { 
      _DOB = value; 
      RaisePropertyChanged(); 

      _age = DateTime.Now.Year - _DOB.Year; 
      RaisePropertyChanged("Age"); 
     } 
    } 
} 
+0

「只要確保最終不會在無限循環中設置DOB屬性的Age屬性,反之亦然。」 我希望'如果(_DOB!= value)'條件會照顧到這一點。我錯了嗎? –

+0

你可能是對的,假設你對日期的計算是正確的:)無論如何,記住這一點是件好事,你顯然已經做了。 – mm8

+0

謝謝。我希望有某種方式來表達一種財產對他人的依賴,這樣一來,改變自己的價值就會自動引發對他人的重新評估。 –