2009-04-29 114 views
7

我們有一個從DependencyObject派生的對象,並實現了一些DependencyProperties。WPF中的自定義相關屬性和雙向綁定

基本上是這樣的:

class Context : DependencyObject { 
    public static readonly DependencyProperty NameProperty = 
    DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata ("")); 
    public string Name { 
     get { 
      return (string)this.GetValue (NameProperty); 
     } 
     set { 
      this.SetValue (NameProperty, value); 
     } 
    } 
} 

這個作品中,屬性是設置,可以約束等問題是當我綁定到WPF從該屬性格式,採用雙向綁定。 TwoWay部分從來沒有實際發生過,WPF從來沒有調用過這個屬性的集合。我已經把我的結合起來是這樣的:

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

在這種情況下,在文本框中應立即更新Name屬性打字,但事實並非如此。如果我將Name屬性更改爲常規POCO屬性,它將起作用(儘管TwoWay的另一側顯然不會執行INotifyPropertyChanged)。

我在這裏做錯了什麼?這應該是一件非常簡單的事情,但這會讓我頭痛不已。

回答

11

這是預期的行爲。 CLR財產僅僅是底層DependencyProperty的包裝。 WPF經常通過直接呼叫GetValueSetValue進行優化。如果您需要自定義邏輯來執行,則使用DependencyProperty的元數據。

+0

哎呀,我是個白癡。你100%正確,價值本身設置正確,但是二傳手永遠不會被調用,這是通過我的。謝謝。 – 2009-04-29 17:31:10

2

後,這個問題我花了一些時間:

對於那些你們誰有同樣的問題,但是 - 像我一樣 - 不要看上面的答案解決方案:

爲了支持繼承DataContext,自定義類(本例中爲Context)必須從FrameworkElement派生而不是DependencyObject。就這樣。

Marc