Estamos utilizando el método estándar para que nuestros controles notifiquen reglas de BO incorrectas. Esto se hace a través de la interfaz IDataError en nuestras BO y en XAML el control está ligado a la propiedad de la BO, etc. Este enfoque funciona bien. Pero tenemos que mostrar 2 tipos de imágenes en la interfaz de usuario dependiendo del tipo (o categoría si lo desea) del error de invalidación. Si es un campo obligatorio, mostramos un CueBanner (marca de agua) pero para otros tipos cambiamos el color de la frontera de controles. En ambos casos configuramos el tipo de herramienta del mensaje de error.¿Es esta una manera alocada de manejar tipos de validación múltiple con IDataError y WPF?
El problema con IDataError es que no admite un método/propiedad para distinguir entre los tipos de error.
La única manera en que puedo hacer eso es examinando el texto de error, el texto del campo requerido debe contener la palabra clave "required". El siguiente enfoque no parece correcto, pero es la única forma en que puedo determinar el tipo de error y luego tratarlo en consecuencia. Todas las reglas de campo requeridas deben tener como parte del texto de error "campo obligatorio". Para que todo esto funcione, he creado una propiedad de dependencia personalizada llamada ErrorMessage. En mi ResourceDictionary tengo un Style.Trigger para Validation.HasError. Allí establecí el valor de mis propiedades de dependencia en el ErrorContent. Ahora, cuando cambie el valor de mis propiedades de dependencia, puedo examinar el texto y establecer Validation.SetErrorTemplate (myControl, newErrorTemplate) en la plantilla para adaptarme al tipo de error. Tengo que conectar algunos eventos al control como lost y get focus para gestionar la eliminación o adición de la plantilla cueBanner, pero todo funcionará. Es solo que no estoy seguro de que sea la mejor manera de hacerlo.
PS. Cuando configuro ErrorTemplate, estoy haciendo esto en código, eso es construirlo y agregarlo. ¿Hay alguna manera de apuntar Validation.SetErrorTemplate a un recurso estático teniendo en cuenta que necesito cambiar entre al menos 2 tipos?
Sus pensamientos favor ..
No creo que se pueda acceder a la propiedad adicional desde la plantilla de error. El DataContext de ErrorTemplate es la colección Validation.Errors. –