我有以下课程
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页面外部的进程更改的,我需要一个静态方法,我可以调用它来触发所有绑定实例的属性更改通知。我正在努力弄清楚我该怎么做。所有的想法都将受到最高的赞赏。
答案 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
属性中也使用的资源键。