2010-12-02 57 views
0

Je souhaite combiner la liaison de mon contexte de données personnalisées qui contient la classe ViewModel et la classe ResourceProvider. Le contexte de données personnalisé est défini en tant que fenêtre DataContext.Comment combiner une liaison à partir d'un contexte de données personnalisé avec un balisage personnalisé

Je l'utilise de cette façon:

<Button x:Name="btnShow" Content="Show" Command="{Binding View.HandleShow}"/> 

Quelle est la propriété Voir de DataContext. Je veux utiliser la localisation par contexte de données personnalisées en utilisant le balisage minimum et définir ResourceProvider d'une autre source dans le code que j'ai créé mon propre contexte de données

Y at-il une possibilité de le faire dans quelque chose qui est similaire à cette ligne de code:

<TextBlock Text="{Binding Res.Key=test}" /> 

Mon fournisseur de ressources hérite de l'extension de balisage avec une propriété: clé.

Merci pour tout conseil

Répondre

1

Vous pouvez créer une extension de balisage personnalisé à l'aide du code ci-dessous:

public class LocalizedBinding : MarkupExtension 
{ 
    public String Key { get; set; } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     IProvideValueTarget target = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget)); 

     //use target.TargetObject and target.TargetProperty to provide value based on Key 
    } 
} 

et de l'utiliser comme:

<TextBlock Text="{local:LocalizedBinding Key=SomeKey}" /> 
0

J'essaie cette solution, mais je préfère évitez le préfixe local car localizedBinding provient de sources différentes et utilise le pattern IoC à cause de cela je crée CustomDataContext