如何从静态方法触发PropertyChanged事件?

时间:2010-07-15 10:41:57

标签: silverlight data-binding xaml static inotifypropertychanged

我有以下课程

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方法的唯一目的是允许属性通知在一个或多个资源更改时更新绑定。实际绑定值由转换器提供,通过作为参数传递的名称查找资源。有关更多背景信息,请参阅this answer上的评论。

我的问题是资源是由包含绑定的XAML页面外部的进程更改的,我需要一个静态方法,我可以调用它来触发所有绑定实例的属性更改通知。我正在努力弄清楚我该怎么做。所有的想法都将受到最高的赞赏。

1 个答案:

答案 0 :(得分:1)

按如下方式修改您的课程: -

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属性中也使用的资源键。