2010-09-30 9 views
3

Certains UserControl utilise des convertisseurs, qui ressemblent généralement à ceci:Interceptions pour convertisseurs de valeur dans Silverlight

<UserControl.Resources> 
    <Converters:CurrentDataConverter x:Key="CurrentDataConverter"/> 
</UserControl.Resources> 

Je voudrais avoir un contrôle utilisateur de base pour l'interception des convertisseurs, par exemple, à utiliser l'injection de dépendance. Serait-ce possible? Merci.

+0

Idée géniale pour l'injection de convertisseurs. Va commencer à le faire dans nos applications Prism. +1 :) –

Répondre

1

Des convertisseurs (ou n'importe quelle ressource) peuvent être déclarés à n'importe quel niveau de la hiérarchie Xaml. Le meilleur endroit pour les injecter est la collection de ressources App globale (qui est recherchée en dernier pour les clés).

À n'importe quel moment au démarrage, vous ajoutez simplement des instances des convertisseurs en tant que paires nom/valeur, plutôt que de les déclarer dans Xaml. Cela signifie que vous avez un contrôle total sur la création et pouvez utiliser un conteneur IOC pour les créer.

+0

Merci pour la réponse. Lorsque j'ajoute des convertisseurs aux ressources avant le démarrage de l'application, j'obtiens une exception XamlParseException "Impossible de trouver une ressource avec le nom/clé ...", cela se produit à la compilation, je suppose. Pour éviter cela, je dois obtenir toutes les liaisons dans UserControl via la méthode GetBindingExpression et définir le convertisseur dans le code derrière. – Dmitry

+0

De la mémoire app.xaml est traitée juste avant le chargement du premier écran. Vous pouvez placer le hook dans l'événement load du shell externe principal et ajouter les convertisseurs à App.Current.Resources * dans le code *. Utilisez-vous Prism ou un autre modèle? –

+0

Je n'utilise pas Prism, le modèle est basé sur MVVM léger. – Dmitry