En Silverlight, ¿se pueden definir valores mínimos / máximos para una propiedad de dependencia?

StackOverflow https://stackoverflow.com/questions/1203042

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í?

¿Fue útil?

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:

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top