Pregunta

Estoy a punto de comenzar un nuevo proyecto mío y actualmente estoy evaluando algunas técnicas de localización, modularidad, etc.

Tengo (al menos en mi opinión) un enfoque bastante bueno para la localización, pero ahora me cuesta encontrar una buena solución para la vinculación de datos.

Quiero enlazar valores de campos de texto, etc. (UIElements en general) a un método específico en el DataContext del formulario. El método se ve así:

public void GetValue (nombre de cadena)

donde nombre es una " ruta " en forma de "nodo / subnodo / subsubnodo". Pensé en usar un ValueConverter para el enlace y esto funcionó bastante bien hasta ahora.

Mi expresión de enlace se ve así:

{Binding Path = Localization, Converter = {StaticResource LocalizationConverter}, ConverterParameter = PrismBreak / Shell.xaml / New}

Pienso que esta expresión de enlace, aunque hace su trabajo, es algo que se utiliza para cada UIElement. Así que pensé si era posible definir un ValueConverter predeterminado para un determinado tipo (- > siempre que ese tipo esté vinculado a algún lugar donde se use ValueConverter).

¿Es eso posible en WPF?

Si no es posible, ¿hay alguna otra buena forma de enlazar a un método con parámetros dinámicos?

Gracias de antemano y saludos,

Chris

¿Fue útil?

Solución

La forma prescrita de hacer localización para WPF, es crear BAML localizado en ensamblajes de satélite; esto se logra agregando la x: Uid propiedad adjunta a los elementos que Deseaba ser localizado. Hay una buena sección WPF Globalization and Localizatio n en MSDN que describe el técnicas

Otro enfoque que sugeriría sería crear un tipo de 'Diccionario de localización' estático e implementar ICustomTypeDescriptor , para redirigir los enlaces de propiedad entrantes a las cadenas en su diccionario. Podrías terminar haciendo algo como esto:

<Button Content="
    {Binding Source={x:Static local:MyStaticType.Localization}, 
             Path=HelloButtonTitle}" /> 

Y podría continuar aprovechando las tecnologías existentes, como los conjuntos de satélite RESX +.

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