1

Get / SetValueを直接呼び出すことでバイパスできるため、依存関係プロパティラッパーのアクセサメソッドに動作を追加しないことをお勧めします。

OK、それは合理的です。では、この振る舞いをどこに置くのでしょうか?

ValidateValueCallback依存関係プロパティを登録するときにデリゲートを提供できます。これは、「秒は0〜59の範囲でなければならない」などのコンテキストに依存しないチェックに十分な、単一のパラメーターオブジェクト値を取得する来歴の静的メソッドを呼び出します。

インスタンスに依存するコンテキスト情報が必要な場合があります。たとえば、Dayの有効な範囲は、Monthのインスタンス値によって異なります。

この場合、私たちは何をすべきでしょうか?これは、propdpセッターで処理するのは簡単です。

以下では、PropertyChangedイベントをこの種の検証に使用することが提案されています。これは、実際、この質問を促した状況で私が行ったことです。ただし、この段階で変更がモデルにコミットされているため、これは醜いです。そのため、前の値へのアクセスを提供するために元に戻るスタックを維持する必要があります。

このトピックに関するMSDNの資料はあるようですが、必要な考慮事項を与える時間がありませんでした。

4

1 に答える 1

1

私は解決策を見つけたと思いますCoerceValueCallback。プロパティが変更される前に実行され、必要に応じて値をインターセプトして変更してから、さらに渡すことができます。

おそらく、これを試して、自分の状況で機能するかどうかを確認できます。

public static readonly DependencyProperty MyPropertyProperty =
    DependencyProperty.Register("MyProperty", typeof(int), typeof(MainWindow), new PropertyMetadata(0, null, new CoerceValueCallback(CoercePropertyValue)));

private static object CoercePropertyValue(DependencyObject d, object value)
{
    if (This != That)
    {
        return value;
    }
    return 6;
}
于 2013-01-11T04:55:06.867 に答える