2013-02-25 72 views
3

我有一個DependencyProperty爲DependencyObject:數據綁定依賴項屬性數據對象

public class DependencyObjectClass: DependencyObject 
{ 
    public static DependencyProperty BooleanValueProperty = DependencyProperty.Register("BooleanValue", typeof (bool), typeof (DependencyObjectClass)); 
    public bool BooleanValue 
    { 
     get { return (bool)GetValue(BooleanValueProperty); } 
     set { SetValue(BooleanValueProperty, value); } 
    } 
} 

我也有我的數據源類:

public class DataSource: INotifyPropertyChanged 
{ 
    private bool _istrue; 
    public bool IsTrue 
    { 
     get { return _istrue; } 
     set 
     { 
      _istrue = value; 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs("IsTrue")); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

我試圖綁定與兩個以上的對象此代碼:

var dependencyObject = new DependencyObjectClass(); 
var dataSource = new DataSource(); 
var binding = new Binding("IsTrue"); 
binding.Source = dataSource; 
binding.Mode = BindingMode.TwoWay; 
BindingOperations.SetBinding(dependencyObject, DependencyObjectClass.BooleanValueProperty, binding); 

每當我更改DependencyObjectClass上的BooleanValue屬性時,Dat aSource會做出反應,但它不會以其他方式工作(更改DataSource上的IsTrue屬性對於DependencyObjectClass沒有任何作用)。

我在做什麼錯?我必須手動處理OnPropertyChanged事件嗎?如果是的話,那將會有點令人失望,因爲我期待這一切能夠自動完成。

+0

只是旁白問題,這是什麼意圖?你在創建一個自定義控件嗎? – 2013-02-25 15:53:18

+0

我也看到綁定布爾屬性的一些問題。如果我們從VM通知相同的值來查看它不反映在DependencyProperty.Like的setter中,如果您具有IsTrue的真實值,然後再次分配true,則DependencyProperty的setter不會反映它。這意味着如果你再次設置相同的值,它不反映給DependencyProperty的設置者。 – ethicallogics 2013-02-25 16:10:49

+0

HighCore,我基本上在非WPF對象上實現MVVM模式。我編寫了一個插件,我需要使用一些第三方UI元素,所以我選擇將它們包裝在我自己的類中,派生自DependencyObject。歡迎任何建議。 – jur 2013-02-26 07:05:31

回答

2

改變對數據源IsTrue運算性能無助於 DependencyObjectClass

我猜你從一個事實,即DependencyObjectClass.BooleanValue屬性setter永遠不會被調用結束本。事實上,WPF並沒有這樣做。相反,它直接設置依賴項屬性的值,就像直接調用SetValue一樣。

參見Checklist for Defining a Dependency PropertyImplications for Custom Dependency Properties的解釋。

爲了獲得關於已更改的依賴項屬性值的通知,您必須在DependencyProperty.Register中註冊PropertyChangedCallback以及依賴項屬性元數據。

+0

謝謝!我沒有想到檢查價值,而只是看它的訪問者。 – jur 2013-02-26 08:04:27