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.
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