- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题是如何实现INotifyPropertyChanged
在静态属性上,因为您实现的事件不是静态的,并且不能由静态属性调用。此外,您不能绑定(bind)到 Silverlight 中的静态属性。
我已经看到这个问题出现在几个论坛中,提供了各种解决方案,但没有一个非常令人满意。
好吧,我想我找到了一个优雅的解决方案,但它太简单了,我觉得我一定错过了一些东西。
答案是,编写一个访问静态变量的非静态属性,如下所示:
private static double length;
public double Length
{
get
{
return length;
}
set
{
length = value;
NotifyPropertyChanged("Length");
}
}
最佳答案
从技术上讲,您仍然没有绑定(bind)到静态属性 - 您正在绑定(bind)到类的实例,该实例使用静态字段作为后备存储。这在某种程度上会起作用,但是...
这有一个基本问题 - 如果您有多个项目绑定(bind)到同一个后备存储(这似乎是您正在尝试的事情,因为您故意将其设为静态),INotifyPropertyChanged
通知只会在您当前绑定(bind)的实例上发生。
例如,假设您有两个并排放置的 UserControl,它们都绑定(bind)到包含此代码的 ViewModel。当控件 A 设置此属性时,控件 B 将永远不会收到通知(因为运行的是 A 的 INotifyPropertyChanged),因此它会显得不同步。
如果你真的想尝试做这样的事情,你最好让你的后备存储使用一个实现 INotifyPropertyChanged 的类,并通过你的 ViewModel 类“冒泡”属性。这样,多个实例都将得到正确通知,并且您可以处理必要时可能发生的任何多线程/同步问题。
或者,您可能需要考虑在 Singleton 内部使用单个实例属性(带有实例字段)。 .这也将为您提供“静态”属性的共享通知。
关于.net - 在 WPF 和 Silverlight 中的静态属性上实现 INotifyProperty 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925696/
我有一个绑定(bind)到列表框的 ObservableCollection public ObservableCollection Insertions { get {
问题是如何实现INotifyPropertyChanged在静态属性上,因为您实现的事件不是静态的,并且不能由静态属性调用。此外,您不能绑定(bind)到 Silverlight 中的静态属性。 我已
我是一名优秀的程序员,十分优秀!