Silverlightでは、DependencyPropertyの最小/最大値を定義できますか?
-
05-07-2019 - |
質問
たとえば、CanvasのScaleTransformを変更する依存関係プロパティがありますが、ゼロ未満になるとエラーがスローされます。もちろん、それが発生した場合はコードで強制的にゼロにすることもできますが、Silverlightには存在しない、または最小/最大値を設定するudouble(unsigned double)を使用するなど、より良い方法を使用したいですDependencyPropertyのどこかに。
ここでの最善のアプローチは何ですか?
解決
DependencyPropertyでこれを処理する場合は、 PropertyChangedCallback 。値が正しい範囲にあることを検証し、そうでない場合はオーバーライドします。
依存関係プロパティの外部でこれを処理することもできます。例えば:
- A 値コンバーター
- モデルでこれを強制し、常に有効な値を持つViewModelにバインドします。 MVVMの詳細はこちらをご覧ください。
他のヒント
それに追加するのは、PropertyChangedCallback内で、例外をスローする前に、典型的なパターンが誤った/範囲外の値で元に戻されることです。
元に戻さない場合、実際には範囲外の値が設定されたままになり、状態は無効になります。
この「貧乏人の強要」の例が表示されます。 Silverlightツールキットの一部。 AutoCompleteBox.csソースです。
>パターンは次のようなものです:
int newValue = (int)e.NewValue;
if (newValue < 0)
{
source._ignorePropertyChange = true;
d.SetValue(e.Property, e.OldValue);
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Properties.Resources.AutoComplete_OnMinimumPopulateDelayPropertyChanged_InvalidValue, newValue), "value");
}
独自の「読み取り専用」を実装することもできます同様の方法でSilverlight依存関係プロパティを設定しますが、値を設定するか元に戻すかを示すプライベートフィールドが必要になります。
所属していません StackOverflow