数据绑定依赖属性到数据对象

时间:2013-02-25 15:47:15

标签: c# .net wpf data-binding dependency-properties

我有一个带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属性时,DataSource都会做出反应,但它不会反过来工作(更改DataSource上的IsTrue属性不会对DependencyObjectClass做任何事情)。

我做错了什么?我是否必须手动处理OnPropertyChanged事件?如果是,则会有点令人失望,因为我期望这是自动完成的。

1 个答案:

答案 0 :(得分:3)

  

更改DataSource上的IsTrue属性不会执行任何操作   DependencyObjectClass

我想你的结论是DependencyObjectClass.BooleanValue属性setter永远不会被调用。实际上WPF并不这样做。相反,它直接设置依赖项属性的值,就像直接调用SetValue一样。

请参阅Checklist for Defining a Dependency PropertyImplications for Custom Dependency Properties以获取解释。

为了获得有关更改的依赖项属性值的通知,您必须在PropertyChangedCallback中注册带有依赖项属性元数据的DependencyProperty.Register