Data binding dependency property to data object

拜拜、爱过 提交于 2019-12-29 08:56:12

问题


I have a DependencyObject with a DependencyProperty:

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); }
    }
}

I also have my data source class:

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;
}

I am trying to bind the two above objects with this code:

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);

Whenever I change the BooleanValue property on DependencyObjectClass, the DataSource does react, but it doesn't work the other way around (changing IsTrue property on DataSource does nothing for DependencyObjectClass).

What am I doing wrong? Do I have to manually handle the OnPropertyChanged event? If yes then that would be a bit disappointing, as I was expecting this to be done automatically.


回答1:


changing IsTrue property on DataSource does nothing for DependencyObjectClass

I guess you conclude this from the fact that the DependencyObjectClass.BooleanValue property setter is never called. In fact WPF does not do that. Instead it directly sets the value of the dependency property, just like calling SetValue directly.

See Checklist for Defining a Dependency Property and Implications for Custom Dependency Properties for an explanation.

In order to get notified about a changed dependency property value, you would have to register a PropertyChangedCallback with the dependency property metadata in DependencyProperty.Register.



来源:https://stackoverflow.com/questions/15070780/data-binding-dependency-property-to-data-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!