Как я могу вызвать событие PropertyChanged из статического метода? - PullRequest
1 голос
/ 15 июля 2010

У меня есть следующий класс

public class LanguagingBindingSource : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;

  public string Dummy
  {
    get { return String.Empty; }
    set
    {
      PropertyChanged(this, new PropertyChangedEventArgs("Dummy"));
    }
  }
}

, который связан с элементами в XAML следующим образом

Text="{Binding Dummy,Source={StaticResource languageSource},Converter={StaticResource languageConverter},ConverterParameter=labelColor}"

Единственная цель класса LanguageBindingSource и его метода Dummy - разрешить свойствоуведомления для обновления привязок при изменении одного или нескольких ресурсов.Фактические связанные значения предоставляются преобразователем, ища ресурсы по именам, переданным в качестве параметров.См. Комментарии к этому ответу для получения дополнительной информации.

Моя проблема в том, что ресурсы меняются процессом, внешним по отношению к страницам XAML, содержащим привязки, и мне нужен один статический метод,может вызвать триггер уведомления об изменении свойства для всех экземпляров привязки.Я пытаюсь понять, как я могу это сделать.Все идеи будут оценены по достоинству.

1 Ответ

1 голос
/ 15 июля 2010

Измените свой класс следующим образом: -

public class LanguagingBindingSource : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged = delegate {};

  public static void FirePropertyChanged(string key)
  {
     ((LanguagingBindingSource)Application.Resources[key]).NotifyPropertyChanged("Dummy");
  }

  private void NotifyPropertyChanged(string name)
  {
    PropertyChanged(this, new PropertyChangedEventArgs(name);
  }

  public string Dummy
  {
    get { return String.Empty; }
    set
    {
      NotifyPropertyChanged("Dummy"));
    }
  }
}

Теперь в любой точке, где вам нужно отменить это изменение, используйте: -

LanguagingBindingSource.FirePropertyChanged("languageBindingSource");

Где "languageBindingSource" - это ключ ресурса, который вы также используете в свойстве привязки Source.

...