2013-11-20 30 views
4

命名約定意味着(通常)屬性是名詞,方法是動詞。現在,我知道這些是指南,而不是規則,但是,如果可以,最好遵循指南。屬性調用方法或啓動事件是否「錯誤」

這意味着,以下

Person.Name = "Dave"; 

應該只設置Name屬性。我不希望該屬性看起來像

public string Name 
{ 
    set 
     { 
      UpdateDatabase(value); 
     } 
} 

我的問題幾乎正是上面的例子,但與DependencyProperties。

我的應用程序有一個用戶控件,它看起來像

<uc:MyControl MyControlMyValue="{Binding RelativeSource={RelativeSource AncestorType=userControls:MyOtherControl}, Path=MyValue, Mode=OneWayToSource}" /> 

所以,你可以在上面看到,當MyControlMyValue屬性更新,它更新myvalue的財產。我遇到的問題是當這個屬性更新時,我需要它執行比簡單綁定更多的邏輯!

目前,我投票給忽略了指導,貫徹落實類似

private double _myValue; 
    public double MyValue 
    { 
     get { return __myValue; } 
     set 
     { 
      if (value == __myValue) 
       return; 

      __myValue= value; 
      LookAtMeHiddenAway(); 
      OnPropertyChanged("MyValue"); 
     } 
    } 

是否有更好的方法,因爲它不會覺得很我錯了?

+0

閱讀財產應該很快。但是寫它呢?你在那裏舉辦一個活動,所以當你設置它時,任意代碼都可以運行。無論如何,如果是這種情況,什麼阻止你調用一個方法? –

+0

是@Kris,你是對的,但這個意思是由微軟設計的,出於某種原因,我覺得這是唯一的例外規則......我還是這個世界的新手(編程),所以這些指南對於我。 – Dave

+1

僅供參考,更新綁定時,不會調用類中的DependencyProperty setter/getters。綁定系統在低層次上處理這個問題,所以你希望在你的setter/getters中運行的任何代碼都不會被調用。 – Will

回答

6

嗯,這取決於。 如果我們在談論一般的編程指南,我會說不。不要在屬性中調用方法,因爲我和其他人在使用屬性時(寫/讀)我們期望存儲和檢索數據。所以如果你要更改的東西,通過調用一個方法來改變它,通過聲明體現它的行爲。

如果相反,WPF表示實際上是預期的行爲。所以如果WPF屬性適合在內部更改數據,並且預計表現得那樣。

底線:有主題上沒有強烈的限制,但建議,是基於在給定環境的代碼預期的行爲準則

+0

啊,這樣WinForms的人在這裏看着我,因爲我犯了一個致命的罪,當我建議它!所以,實際上預計(接受)在這些情況下在屬性內部具有方法。謝謝。 – Dave

+1

@DaveRook:對於WPF,是的。因爲我們綁定一個屬性,並期望它會改變ModelView中的某些東西(如果它自然不是隻讀的) – Tigran

+0

@DaveRook:是的WindowsForms它不是一個好主意,但是,如果你確實需要*,沒有人可以限制它。這些只是指南。 – Tigran

4

我會創建一個名爲OnMyValueChanged的事件,當屬性發生變化時,需要更新的事件會爲該事件註冊一個處理程序。或者處理PropertyChanged事件。它的確是一樣的東西,但是它避免了將邏輯放在setter中,而不直接適用於屬性(例如約束值)。

相關問題