2011-09-13 9 views
7

En mi aplicación MVVM Silverlight 4, i puede cambiar de idioma en tiempo de ejecución:Silverlight ValidatesOnException mensaje predeterminado localización

public void SetLanguage(string language) 
{ 
    var culture = new CultureInfo(language); 
    Thread.CurrentThread.CurrentUICulture = culture; 
    Thread.CurrentThread.CurrentCulture = culture; 
    // ... 
} 

Para las entradas, me acaba de agregar "ValidatesOnException = true" en caso de problemas de conversión y lo hace el trabajo. Pero el mensaje de excepción predeterminado está en la cultura de mi sistema operativo y no en el elegido manualmente.

En este hilo en exception message localization la idea es cambiar CurrentCulture y CurrentUICulture, lo que hice. Así que estoy algo atrapado.

¿Qué puedo hacer?

Gracias :)

Edit: He intentado utilizar un convertidor de medida con una excepción personalizada en el método ConvertBack con el fin de validar la entrada del usuario. Problema, una excepción dentro de un método de conversión NO es captada por validatesOnException, rompe la aplicación.

Editar 2: para aclarar -> si tengo una propiedad de decimal vinculada a un cuadro de texto, y escribo "blabla" en este cuadro de texto, quiero ver que hay un problema, y ​​quiero que el mensaje esté en la configuración regional de tiempo de ejecución y no la configuración regional del sistema operativo. No puedo generar una excepción en mi conjunto de propiedades porque nunca llego allí, el convertidor predeterminado levanta su propia excepción antes de eso.

Espero que esté claro. Si puedo ayudarlo a ayudarme, no dude :)

Respuesta

0

Quizás no esté cambiando la cultura desde el principio.

que sugieren que intenta el enfoque dado en la primera respuesta en este enlace:

Change culture of Silverlight application

+0

no quiero establecer el idioma en el constructor, quiero poder cambiarlo en tiempo de ejecución. Esto no aplica, este.lenguaje es un conjunto privado. –

+0

El hecho de que esté en el constructor no significa que no pueda en el tiempo de ejecución.Usa un constructor parametrizado e incluye la lógica similar al método SetLanguage que has usado –

0

Un enfoque posible es cambiar el tipo de la propiedad a string, a pesar de que usted está almacenando una decimal valor detrás de él. El captador llamaría al ToString en el valor decimal almacenado, y el colocador haría la conversión de string a decimal usando Decimal.Parse o similar. Este enfoque significa que tiene que hacer la conversión de tipo usted mismo, pero al menos le da un poco más de control.

Su sistema puede lanzar excepciones para indicar errores de validación. Alternativamente, puede usar una de las interfaces IDataErrorInfo y INotifyDataErrorInfo para mostrar el error de validación. This page tiene un ejemplo de uso de IDataErrorInfo, y this one tiene un ejemplo utilizando INotifyDataErrorInfo.

0

Puede usar la implementación personalizada de ValidationRule y agregarla a la colección Binding.ValidationRules. Tendrá que borrar la colección antes (no estoy seguro de cómo hacerlo XAML) y agregar esta regla (cómo hacerlo se describe en una de las páginas de MSDN).

Esta clase tiene el método Validate, donde puede realizar su validación y devolver el mensaje de error que desea.

+0

no existe en silverlight, solo en wpf:/ –

+0

ah, lo siento, estaba bastante seguro de que obtengo +100 reputación;) qué versión de SL son estás usando? En SL4 puedes implementar la interfaz IDataErrorInfo. –

Cuestiones relacionadas