質問

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プロパティに変更すると、機能します(ただし、TwoWayの反対側はINotifyPropertyChangedを実装しない限り明らかに機能しません)。

ここで何が間違っていますか?これは非常に簡単なことですが、頭痛の種は終わりません。

役に立ちましたか?

解決

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

他のヒント

この問題の後、時間がかかりました:

同じ問題を抱えているが、私のように、上記の答えに解決策が表示されない場合:

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

マーク

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top