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 属性时,DataSource 都会做出反应,但反过来却不起作用(更改 DataSource 上的 IsTrue 属性对 DependencyObjectClass 没有任何作用)。

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

4

1 回答 1

3

更改 DataSource 上的 IsTrue 属性对 DependencyObjectClass 没有任何作用

DependencyObjectClass.BooleanValue我猜你是从从未调用过属性设置器这一事实得出的结论。事实上 WPF 并没有这样做。相反,它直接设置依赖属性的值,就像SetValue直接调用一样。

有关说明,请参阅定义依赖属性的清单和自定义依赖属性的含义

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

于 2013-02-25T16:07:49.733 回答