如何强制MarkupExtension再次绑定

时间:2011-04-28 09:27:46

标签: wpf xaml wpf-controls binding

我希望在语言更改时强制我的自定义扩展程序再次绑定:

[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属性,而且适用于所有事件我的扩展机制在窗口上。

1 个答案:

答案 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事件。