58

私がこれを求めている理由は、@ Greg D(この質問から)によって代わりに使用するように勧められたためですSetCurrentValue()が、ドキュメントを見て、違いがわかりませんでした。または、「バリューソースを変更せずに」とはどういう意味ですか?

SetValue()

依存関係プロパティ識別子で指定された依存関係プロパティのローカル値を設定します。

SetCurrentValue()

値のソースを変更せずに、依存関係プロパティの値を設定します。

4

3 に答える 3

67

あなたが提供したMSDNリンクはそれを非常によく言っています:

このメソッドは、アプリケーションによるプロパティの宣言された使用を無効にすることなく、独自のプロパティの 1 つの値をプログラムで設定するコンポーネントによって使用されます。SetCurrentValue メソッドはプロパティの有効な値を変更しますが、既存のトリガー、データ バインディング、およびスタイルは引き続き機能します。

TextBoxコントロールを作成していてText、次のように人々がよく使用するプロパティを公開したとします。

<TextBox Text="{Binding SomeProperty}"/>

コントロールのコードでは、呼び出すと、指定したものでバインディングSetValue上書きされます。ただし、を呼び出すとSetCurrentValue、プロパティが指定された値を受け取るようになりますが、バインディングは破棄されません。

私の知る限り、グレッグのアドバイスは正しくありません。CLR ラッパー プロパティから常にGetValue/を使用する必要があります。特定の値を取得するプロパティが必要であるが、プロパティに対して構成されているバインディング、トリガー、またはスタイルを上書きしたくないシナリオでは、より便利です。SetValueSetCurrentValue

于 2010-11-20T11:01:18.687 に答える
3

受け入れられた答えに加えて:

この投稿は SetCurrentValue() を非常によく説明していることがわかりました。Dependency Property Value Precedence システムがバインドされた値よりもローカルな値を取る方法に注意してください。これは、コメンターの予期しない動作を説明しています。

于 2014-03-18T16:50:16.060 に答える