2010-09-12 15 views

Respuesta

1

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 ...

+0

+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

0

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?

+2

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

Cuestiones relacionadas