Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight 如何从静态方法触发PropertyChanged事件?_Silverlight_Data Binding_Xaml_Static_Inotifypropertychanged - Fatal编程技术网

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

Silverlight 如何从静态方法触发PropertyChanged事件?,silverlight,data-binding,xaml,static,inotifypropertychanged,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 PropertyChang

我有以下课程

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


我的问题是,资源是由包含绑定的XAML页面外部的进程更改的,我需要一个静态方法,可以调用该方法来触发绑定所有实例的属性更改通知。我在努力想我该怎么做。非常感谢您的所有想法。

修改您的课程如下:-

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”是您也在绑定
源属性中使用的资源键。

按如下方式修改您的类:-

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”是您也在绑定
源属性中使用的资源键。

这不起作用。我得到一个语法错误;非静态字段、方法或属性“System.Windows.Application.Resources.get”需要对象引用。另外,除非我误解了FirePropertyChanged方法,否则需要从实现绑定的视图中调用,并且资源需要位于应用程序的资源字典中,事实并非如此;资源名称是提供给外部库的键,外部库从数据库中查找资源;我拥有的是一个由许多视图(用户控件等)组成的应用程序,它们都将使用这种绑定机制。其中一个视图中有一个按钮,单击该按钮可打开翻译UI(在我的应用程序范围之外的程序集中实现),用户可在其中为一个或多个资源提供翻译。当这个UI关闭时(它通知我),我需要一个机制来刷新所有视图中的所有绑定。我不知道哪些资源可能已经更改。这不起作用。我得到一个语法错误;非静态字段、方法或属性“System.Windows.Application.Resources.get”需要对象引用。另外,除非我误解了FirePropertyChanged方法,否则需要从实现绑定的视图中调用,并且资源需要位于应用程序的资源字典中,事实并非如此;资源名称是提供给外部库的键,外部库从数据库中查找资源;我拥有的是一个由许多视图(用户控件等)组成的应用程序,它们都将使用这种绑定机制。其中一个视图中有一个按钮,单击该按钮可打开翻译UI(在我的应用程序范围之外的程序集中实现),用户可在其中为一个或多个资源提供翻译。当这个UI关闭时(它通知我),我需要一个机制来刷新所有视图中的所有绑定。我不知道哪些资源可能已经更改。