Как заставить MarkupExtension связываться снова - PullRequest
2 голосов
/ 28 апреля 2011

Я хочу, чтобы мое пользовательское расширение снова связывалось при смене языка:

[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 Ответ

4 голосов
/ 28 апреля 2011

Ваш источник данных должен реализовать событие INotifyPropertyChanged.

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

TranslationData затем должен позаботиться о получении информации об изменении языка и запустить событие PropertyChanged.

...