2016-09-22 82 views
0

我搜索了Internet上的一些代碼,用於監聽INotifyPropertyChanged對象上正在更改的特定屬性。他們大多是在形式監視WPF中屬性更改的正確方法

notifier.PropertyChanged += 
    (s,e) => { 
     if(e.PropertyName.Equals(propertyName)) 
      run_my_code(); 
    } 

然而,根據MSDN

PropertyChanged事件可以指示對象所有的屬性都用null或作爲的String.Empty在屬性名稱更改PropertyChangedEventArgs。

難道上面的實現是

notifier.PropertyChanged += 
    (s,e) => { 
     if(e.PropertyName.Equals(propertyName) || string.IsNullOrEmpty(e.PropertyName)) 
      run_my_code(); 
    } 

?因爲有太多的代碼是以另一種方式進行的,這是否意味着我必須承擔其他的事情?我有時使用空字符串通知屬性更改時,某些代碼不起作用。

+0

該文檔說的那些實現和引發事件的可能會使用null或空,但它是特定於實現的。因此......這取決於。我的想法是使用你的第一種方法,除非第二種方法是必需的。 – strongbutgood

+0

您是對的 –

+0

該文檔無法控制我的代碼濫用Microsoft界面的方式,因此您必須是寬容的。注:我的iPhone提供了將「Microsoft」自動更正爲「microaggression」;做你會做的。但是,你知道,盲點馬,好男孩......都是這樣。 –

回答

2

這真的取決於run_my_code要做什麼。 PropertyChanged事件只是表示對象上的一個或多個屬性已更改。

如果run_my_code需要根據哪個屬性發生變化做出決定,那麼您需要檢查。如果沒有,那麼你不需要檢查。

+0

我引用的代碼是*實際*做了檢查:如果更改的屬性不符合其利益,則它什麼也不做。我的問題是:如果沒有更改屬性名稱,根據微軟的說法,所有屬性可能會改變。那麼我應該'run_my_code'? –

+0

@EarthEngine無論觸發「PropertyChanged」事件的對象發生了什麼,都完全在實施者的控制之下。即使他們傳遞了一個屬性名稱給你,也沒有規則說明實際上有任何改變。除非我們知道實施情況,否則沒有明確的答案。 –