私がこれを求めている理由は、@ Greg D(この質問から)によって代わりに使用するように勧められたためですSetCurrentValue()
が、ドキュメントを見て、違いがわかりませんでした。または、「バリューソースを変更せずに」とはどういう意味ですか?
依存関係プロパティ識別子で指定された依存関係プロパティのローカル値を設定します。
値のソースを変更せずに、依存関係プロパティの値を設定します。
私がこれを求めている理由は、@ Greg D(この質問から)によって代わりに使用するように勧められたためですSetCurrentValue()
が、ドキュメントを見て、違いがわかりませんでした。または、「バリューソースを変更せずに」とはどういう意味ですか?
依存関係プロパティ識別子で指定された依存関係プロパティのローカル値を設定します。
値のソースを変更せずに、依存関係プロパティの値を設定します。
あなたが提供したMSDNリンクはそれを非常によく言っています:
このメソッドは、アプリケーションによるプロパティの宣言された使用を無効にすることなく、独自のプロパティの 1 つの値をプログラムで設定するコンポーネントによって使用されます。SetCurrentValue メソッドはプロパティの有効な値を変更しますが、既存のトリガー、データ バインディング、およびスタイルは引き続き機能します。
TextBox
コントロールを作成していてText
、次のように人々がよく使用するプロパティを公開したとします。
<TextBox Text="{Binding SomeProperty}"/>
コントロールのコードでは、呼び出すと、指定したものでバインディングSetValue
が上書きされます。ただし、を呼び出すとSetCurrentValue
、プロパティが指定された値を受け取るようになりますが、バインディングは破棄されません。
私の知る限り、グレッグのアドバイスは正しくありません。CLR ラッパー プロパティから常にGetValue
/を使用する必要があります。特定の値を取得するプロパティが必要であるが、プロパティに対して構成されているバインディング、トリガー、またはスタイルを上書きしたくないシナリオでは、より便利です。SetValue
SetCurrentValue
受け入れられた答えに加えて:
この投稿は SetCurrentValue() を非常によく説明していることがわかりました。Dependency Property Value Precedence システムがバインドされた値よりもローカルな値を取る方法に注意してください。これは、コメンターの予期しない動作を説明しています。