En Silverlight, ¿se pueden definir valores mínimos / máximos para una propiedad de dependencia?
-
05-07-2019 - |
Pregunta
Por ejemplo, tengo una propiedad de dependencia que cambia la ScaleTransform de un Canvas, pero si alguna vez va por debajo de cero, arroja un error. Claro, podría forzarlo a cero en el código si eso sucede, pero prefiero usar un método mejor como usar un udouble (doble sin signo), que no existe en Silverlight o incluso establecer los valores min / max en algún lugar de la DependencyProperty.
¿Cuál es el mejor enfoque aquí?
Solución
Si va a manejar esto en su DependencyProperty, le recomiendo manejarlo en un PropertyChangedCallback , que valida que el valor está en el rango correcto y lo anula si no.
También podría manejar esto fuera de la propiedad de dependencia. Por ejemplo:
- A convertidor de valor
- Aplicar esto en el modelo y vincularlo a un ViewModel que siempre tiene un valor válido. Consulte más información sobre MVVM aquí .
Otros consejos
Solo para agregar a eso, dentro de su PropertyChangedCallback, un patrón típico se revertirá en valores incorrectos / fuera de rango, antes de lanzar una excepción.
Si no realiza la reversión, el valor fuera de rango aún se establecerá y su estado no será válido.
Verá ejemplos de este '' coercio del pobre hombre '' en algunos de Silverlight Toolkit. Aquí está la fuente AutoCompleteBox.cs .
El patrón es algo así como:
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");
}
También puede implementar su propio " solo lectura " Propiedades de dependencia de Silverlight de manera similar, aunque requerirá un campo privado para indicar si está configurando o revertiendo el valor.