他の依存関係プロパティの値を使用して値が計算される依存関係プロパティはどのように登録できますか?依存関係のプロパティ依存関係
.NETプロパティラッパーは、実行時にWPFによってバイパスされるため、ゲッターとセッターにロジックを含めるべきではありません。その解決策は、通常PropertyChangedCallback
秒を使用することです。しかしそれらは静的であると宣言されています。
public bool TestBool
{
get { return (bool)GetValue(TestBoolProperty); }
set
{
SetValue(TestBoolProperty, value);
TestDouble = ((value)?(100.0):(200.0)); // HERE IS THE DEPENDENCY
}
}
public static readonly DependencyProperty TestBoolProperty =
DependencyProperty.Register("TestBool", typeof(bool), typeof(ViewModel));
public double TestDouble
{
get { return ((double)GetValue(TestDoubleProperty)); }
set { SetValue(TestDoubleProperty, value); }
}
public static readonly DependencyProperty TestDoubleProperty =
DependencyProperty.Register("TestDouble", typeof(double), typeof(ViewModel));
限り、依存関係が円形でないとして、これを実現するための適切な手段があります。たとえば
、この不自然なタスクを達成するための適切な方法は何ですか?
'CoerceValueCallback'を使用した場合の利点は、他の依存関係プロパティの' PropertyChangedCallback'内から依存関係プロパティをopedogのように直接変更するのはなぜですか?あなたがリンクしたドキュメントから、あなたの方がより適切な方法であることがわかりますが、実際の違いについては興味があります。 – Gregyski
さて、カップルの名前を付けるには、このプロパティへのバインディングを中断しません(つまり、このプロパティがバインディング式のターゲットであれば、強制的に機能しますが、明示的に設定した後は失われます)。依存関係のプロパティ値解決の優先順位が高くなります(つまり、PropA = "Something"と言う場合、PropA == "Something"という意味ではありません。強制は無視されるため)。プロパティの古い値を覚えています(次回にCoerceValue()を呼び出すと、ローカルに設定されたものではなく、TestDoubleの元の値が取得されます) – Anvaka