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

上記の2つのオブジェクトを次のコードでバインドしようとしています。

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

説明については、依存関係プロパティを定義するためのチェックリストとカスタム依存関係プロパティの意味を参照してください。

変更された依存関係プロパティ値について通知を受け取るには、PropertyChangedCallbackをDependencyProperty.Registerの依存関係プロパティ メタデータに登録する必要があります。

于 2013-02-25T16:07:49.733 に答える