¿Es apropiado lanzar una excepción desde un CoerceValueCallback
si un valor dado no es válido o solo se debe usar ValidateValueCallback
para la validación de valor DP?¿Es apropiado lanzar una excepción de CoerceValueCallback
Respuesta
CoerceValue debería utilizarse para fijar un valor (limítelo entre mínimo y máximo, por ejemplo). No sé si lanzar una excepción bloqueará la aplicación (solo necesita probarla para averiguarlo) o la estructura la manejará, pero no la recomendaría de todos modos porque sería en contra de una buena práctica de codificación.
Para obtener información adicional sobre ValidateValue, a veces tiene que definir algunos campos adicionales en su clase. Puede vincular esos campos o establecerlos antes de establecer un valor para su DP, luego en su ValidateValue puede acceder a esos campos y obtener la información adicional requerida. Este campo adicional que crea y pasa información a través de "capas" intermedias, parece estar bien para Microsoft, porque esa es la forma en que (a corto plazo) diseñaron el marco.
Le daré un ejemplo sobre la nueva cuadrícula de datos WPF. Si va por la ruta estándar y define una RowValidationRule, esperaría tener acceso a ItemsSource (su tabla) para determinar si un valor dado en su fila ya existe en la tabla. Una cosa muy estándar que hacer, pero esa información no se proporciona en la devolución de llamada de validación. Por lo tanto, debe crear un campo en su clase de validación al que pueda enlazar DataSource de DataGrid y luego acceder a ese campo durante la validación ...
primero: Me tomó un pensamiento descubrir que DP significa propiedad de dependencia.
segundo: Por lo que yo entiendo, CoerceValueCallback se trata de fijar el valor de la propiedad a un valor determinado, no de validar el valor. Por lo tanto, optaría por ValidateValueCallback para la validación. ¿No se llama eso de todos modos?
CoerceValueCallback obtiene información sobre el DP y la instancia para la que está configurado el DP. Esto puede ser útil en algunos casos. Sin embargo, ValidateValueCallback solo obtiene el valor que debe validarse. En situaciones "normales", está claro que utilizo ValidateValueCallback, pero si la información adicional es útil/deseada, ¿es legal usar CoerceValueCallback para validar? – HCL
- 1. Lanzar una nueva excepción al lanzar una excepción antigua
- 2. Lanzar manualmente una excepción
- 3. ¿Puede Monitor.Enter lanzar una excepción?
- 4. Lanzar/no-lanzar una excepción basada en un parámetro: ¿por qué no es una buena idea?
- 5. Lanzar Excepción genérica desalentado?
- 6. ¿Por qué es imposible lanzar una excepción desde __toString()?
- 7. lanzar una excepción o devolver null
- 8. Cómo lanzar una excepción matriz en PHP
- 9. ¿Debo devolver nulo o lanzar una excepción?
- 10. Lanzar una excepción desde el evento AppDomain.AssemblyLoad
- 11. ¿Lanzar una excepción sin detener la ejecución?
- 12. Confundido sobre cuándo lanzar una excepción
- 13. Cómo volver a lanzar una excepción
- 14. lanzar una excepción en el hilo C#
- 15. Cuándo devolver bool, lanzar una excepción y qué excepción arrojar
- 16. ¿Cómo puedo lanzar una excepción en Clojure?
- 17. Cómo lanzar una excepción en C?
- 18. C++ re-lanzar una excepción capturado por
- 19. Powershell: crear y lanzar una nueva excepción
- 20. Lanzar excepción en try bloque
- 21. ¿Es una mala práctica escribir un método que no haga nada excepto lanzar una excepción?
- 22. Lanzar una excepción personalizada de un servicio a una actividad
- 23. ¿IllegalStateException es apropiado para un objeto inmutable?
- 24. Cómo lanzar una excepción marcada de un hilo de Java?
- 25. Excepción apropiada para lanzar cuando ocurre un error de análisis?
- 26. java: no se puede volver a lanzar una excepción: no controlada tipo de excepción Excepción
- 27. Prueba de conexión de SQL sin lanzar una excepción
- 28. Declaración de devolución después de lanzar una excepción en C#
- 29. enlace de datos y lanzar una excepción en el colocador
- 30. ¿Debería una violación a las reglas comerciales lanzar una excepción?
+1 Gracias por su respuesta. Hasta donde recuerdo, he probado el comportamiento que se muestra si se lanza una excepción en CoerceValueCallback. Hizo lo que he deseado, pero no lo he usado en el código productivo porque me pareció impuro. Sin embargo, la solución de establecer campos adicionales antes de la validación tampoco me parece muy conveniente y, en algunas situaciones, también es imposible. Pero creo que es como lo escribió, el uso de CoerceValueCallback no se debe utilizar porque no está destinado a hacer esto (en función del nombre de la devolución de llamada y sin tener más información para esto (msdn)) – HCL