2014-02-10 75 views
0

我有這樣定義爲一個依賴屬性的屬性:依賴項屬性和回調

public static readonly DependencyProperty HandleProperty = 
     DependencyProperty.Register("Handle", typeof(Int32?), typeof(SearchTextBox), new PropertyMetadata(HandleChangedHandler)); 
    public Int32? Handle 
    { 
     get { return (Int32?)GetValue(HandleProperty); } 
     set 
     { 
      SetValue(HandleProperty, value); 
     } 
    } 

    public static void HandleChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     var self = (SearchTextBox) sender; 
     self.FindByHandle((Int32)e.NewValue);   
    } 

有了這個代碼,該行從未執行

SetValue(HandleProperty, value); 

,但Handle屬性被改變。

此屬性的值設置在哪裏?

爲什麼不簡單地使用屬性設置器來做到這一點?

+2

'爲什麼不簡單地使用屬性「set」來做到這一點?' - 這部分不清楚。你能否詳細說明一下。 –

+0

我想知道如果我們可以使用setter來代替這個回調會更簡單。 – Beetlejuice

+0

您仍然可以在setter中編寫代碼。但是隻有當你從代碼中設置它時纔會調用它。根據XAML設計,XAML從不使用這些和這些。 –

回答

2

回答所有的問題可以找到here。我將在這裏引用它的一部分:

其XAML處理器的當前WPF實現本質上是 依賴屬性感知。當加載二進制XAML和處理屬性依賴項屬性時,WPF XAML處理器使用屬性系統 方法處理依賴項屬性。這有效地 繞過屬性包裝。當您實現自定義依賴關係 屬性時,您必須考慮到此行爲,並應避免 將其他代碼放置在屬性系統方法GetValue和SetValue以外的屬性包裝器中。

+1

好吧,我明白了。我現在使用OldValue和NewValue來確定屬性更改。 – Beetlejuice