2011-04-28 47 views
2

我想迫使我的自定义扩展到再次绑定时,我的语言变化:如何强制的MarkupExtension绑定再次

[MarkupExtensionReturnType(typeof(string))] 
public class TranalstionExtension : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return Translator.Translate(this.Translate); 
    } 

    public string Translate { get; set; } 
} 

在用法:

<Button Content="{t:Tranalstion Translate=plus}"/> 

我改变了对语言现在它应该返回到属性不同的翻译,如何强制MarkupExtension做到这一点,但不仅为Content属性,但在窗口上我的扩展机制的所有发生。

回答

4

您的数据源必须实施INotifyPropertyChanged事件。

public override object ProvideValue(IServiceProvider serviceProvider) 
{ 
    var binding = new Binding("Value") 
    { 
     Source = new TranslationData(this.Translate) 
    }; 
    return binding.ProvideValue(serviceProvider); 
} 

TranslationData然后必须注意获取有关语言更改的信息并触发PropertyChanged事件。