我希望在语言更改时强制我的自定义扩展程序再次绑定:
[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
属性,而且适用于所有事件我的扩展机制在窗口上。
答案 0 :(得分:4)
您的数据源必须实现INotifyPropertyChanged事件。
public override object ProvideValue( IServiceProvider serviceProvider )
{
var binding = new Binding( "Value" )
{
Source = new TranslationData( this.Translate )
};
return binding.ProvideValue( serviceProvider );
}
然后,TranslationData必须负责了解langauge更改并解除PropertyChanged事件。