3

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.

3
  • Just an aside question, what is the intention of this? are you creating a custom control? Commented Feb 25, 2013 at 15:53
  • I also have seen some problem with binding bool properties .If we Notify same value from VM to View it doesnt reflect in setter of DependencyProperty.Like if you have true value of IsTrue and then you again assign true to it the setter of DependencyProperty doesnt reflect it.It means if you set the same value again it is not reflected to the setter of DependencyProperty. Commented Feb 25, 2013 at 16:10
  • HighCore, I'm basically implementing MVVM pattern on non-WPF objects. I'm coding an add-in where I need to use some third party UI elements, so I've chosen to wrap them in my own classes, derived from DependencyObject. Any suggestions welcome. Commented Feb 26, 2013 at 7:05

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! Didn't occur to me to check the value instead of just watching its accessor.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.