2010-12-02 6 views
0

ViewModelクラスとResourceProviderクラスを含むカスタムデータコンテキストからバインディングを結合したいとします。カスタムデータコンテキストはウィンドウDataContextとして設定されます。カスタムデータコンテキストからのバインディングをカスタムマークアップと結合する方法

私はそのように使用します。ViewはDataContextのの財産である

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

。私は、コード行に類似している何かでそれを行うにはどんな可能性がある最小限のマークアップを使用してカスタムデータコンテキストによってローカライズを使用して、私は

自分のデータコンテキストを作成し、コード内の他のソースからのResourceProviderを設定したい:

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

私のリソースプロバイダは、マークアップ拡張子から1つのProperty:Keyを継承します。

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 
    } 
} 

と同じようにそれを使用します:あなたは、次のコードを使用して、カスタムマークアップ拡張機能を作成することができます任意のアドバイス

答えて

1

ため

おかげ

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

私はその解決策を試したが、私は好みますlocalizedBindingは異なるソースから来て、IoCパターンを使用するため、プレフィックスローカルを避けるために、CustomDataContextを作成します。