Frage

Zum Beispiel habe ich eine Abhängigkeitseigenschaft, die die Scaletransform einer Leinwand ändert, aber wenn es jemals unter Null geht wirft es einen Fehler. Sicher, ich könnte es nur auf Null zwingen, im Code, wenn das jemals passiert, aber ich würde lieber eine bessere Methode, wie mit einem udouble (unsigned double) verwenden, die nicht in Silverlight nicht vorhanden ist oder sogar die Einstellung der Min- / Max-Werte irgendwo in der DependencyProperty.

Was ist der beste Ansatz hier?

War es hilfreich?

Lösung

Wenn Sie vorhaben, dies in Ihrem DependencyProperty zu handhaben, würde ich empfehlen, es in einem Umgang mit Werteumwandler

  • Erzwingen dies im Modell, und die Bindung an ein Ansichtsmodell, das immer einen gültigen Wert hat. Siehe mehr über MVVM hier .
  • Andere Tipps

    Nur um hinzuzufügen, dass in Ihrem PropertyChangedCallback, ein typisches Muster auf unrichtige / Out-of-Range-Werten werden zurückgesetzt wird, bevor eine Ausnahme zu werfen.

    Wenn Sie die Revert nicht tun, der out-of-Range-Wert wird tatsächlich noch festgelegt werden, und Ihr Zustand wird ungültig.

    Sie werden Beispiele für diese „armen Mannes coercian“ in einigen der Silverlight-Toolkit sehen. Hier ist die AutoCompleteBox.cs Quelle .

    Das Muster ist so etwas wie:

       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");
            }
    

    Sie können auch realisieren einen eigenen „read-only“ Silverlight Abhängigkeitseigenschaften in ähnlicher Weise, obwohl es ein privates Feld benötigen werden, um anzuzeigen, ob Sie setzen oder den Wert zurückkehrt.

    Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top