7

DependencyObject から派生し、いくつかの DependencyProperties を実装するオブジェクトがあります。

基本的には次のようなものです:

class Context : DependencyObject {
   public static readonly DependencyProperty NameProperty =
   DependencyProperty.Register ("Name", typeof (string), typeof (Context), new PropertyMetadata (""));
    public string Name {
        get {
            return (string)this.GetValue (NameProperty);
        }
        set {
            this.SetValue (NameProperty, value);
        }
    }
}

これは機能し、プロパティはセットアップされ、バインドできます。問題は、TwoWay バインドを使用して WPF からプロパティにバインドするときに発生します。TwoWay 部分が実際に発生することはなく、WPF がこのプロパティのセットを呼び出すことはありません。バインディングを次のように設定しました。

<TextBox Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

この場合、テキスト ボックスに入力するとすぐに Name プロパティが更新されますが、更新されません。Name プロパティを通常の POCO プロパティに変更すると、機能します (ただし、INotifyPropertyChanged を実装しない限り、TwoWay の反対側は機能しません)。

ここで何が間違っていますか?これは本当に簡単なことですが、頭痛の種は尽きません。

4

2 に答える 2

11

これは予期される動作です。CLR プロパティは、基になる の単なるラッパーDependencyPropertyです。WPF は多くの場合GetValue、 and をSetValue直接呼び出して最適化します。実行するカスタム ロジックが必要な場合は、DependencyProperty.

于 2009-04-29T17:29:38.687 に答える
2

この問題の後、私はしばらく時間がかかりました:

同じ問題を抱えているが、私のように、上記の答えに解決策が見当たらない人のために:

DataContextの継承をサポートするには、カスタムクラス(この場合はContext)をDependencyObjectではなくFrameworkElementから派生させる必要があります。それで全部です。

マーク

于 2011-06-29T08:00:55.840 に答える