Question

Je suis sur le point de démarrer un nouveau projet et j'évalue actuellement certaines techniques de localisation, de modularité, etc.

J’ai (du moins à mon avis) une très bonne approche de la localisation, mais j’ai maintenant du mal à trouver une bonne solution pour la liaison de données.

Je souhaite lier les valeurs de champs de texte, etc. (UIElements en général) à une méthode spécifique dans le DataContext du formulaire. La méthode ressemble à ceci:

public void GetValue (nom de chaîne)

où nom est un "chemin" sous la forme de "noeud / sous-noeud / sous-noeud". J'ai pensé à utiliser un ValueConverter pour la reliure et cela a fonctionné assez bien jusqu'à maintenant.

Mon expression de liaison ressemble à ceci:

{chemin de liaison = localisation, convertisseur = {StaticResource LocalizationConverter}, ConverterParameter = PrismBreak / Shell.xaml / New}

Je pense que cette expression contraignante bien que faisant son travail est un peu explosée pour être utilisée pour chaque UIElement. J'ai donc pensé que s'il était possible de définir un ValueConverter par défaut pour un certain type (- > chaque fois que ce type est lié à quelque part que ValueConverter est utilisé).

Est-ce possible dans WPF?

Si ce n'est pas possible, existe-t-il un autre bon moyen de se lier à une méthode avec des paramètres dynamiques?

Merci d'avance et meilleures salutations,

Chris

Était-ce utile?

La solution

La méthode de localisation recommandée pour WPF consiste à créer une BAML localisée dans des assemblages satellites. ceci est réalisé en ajoutant la propriété x: Uid à vos éléments souhaitait être localisé. Il existe une agréable section WPF Globalization and Localizatio sur MSDN, qui décrit le techniques.

Une autre approche que je suggérerais serait de créer un type statique "Dictionnaire de localisation" et d'implémenter ICustomTypeDescriptor , pour rediriger les liens de propriété entrants vers les chaînes de votre dictionnaire. Vous pourriez finir par faire quelque chose comme ceci:

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

Et vous pouvez continuer à tirer parti des technologies existantes telles que les assemblages RESX + Satellite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top