WPF的新手,并努力解决以下问题:
StatusBarItem显示一个简单的计时器(自加载窗口后的秒数)。绑定源属性和后备DispatcherTimer位于Singleton类中并且是静态的,这似乎是合理的,因为每个应用程序只有一个StatusBar。该类实现了INotifyPropertyChanged,因为它是对StatusBarItem的单向绑定。
WPF 4.5可以使用静态事件(see here)绑定到静态属性。
这不起作用,因为INotifyPropertyChanged不是静态的,所以事件不能是静态的,所以属性不能是静态的。解决方案是保持计时器静态,但使属性不是静态的。
如果它们不能依赖于INotifyPropertyChanged,那么在4.5中引入绑定到静态属性有什么意义呢?是否有静态版本的INotifyPropertyChanged?我一定错过了什么,但不知道是什么。谢谢你的任何澄清。
答案 0 :(得分:1)
您不需要实现INotifyPropertyChanged
接口,只需声明文档中的事件。
答案 1 :(得分:1)
是的,您遗漏了某些内容,您链接的页面描述了如何定义通知WPF静态属性已更改的事件。
对于名为MyProperty的属性,要么创建一个事件,如下所示
public static event EventHandler MyPropertyChanged;
或称为
的通用事件public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged
InotifyPropertyChanged仅用于静态属性,仅用于上述命名事件之一
答案 2 :(得分:0)
您可以将静态属性包装在实例属性中,但设计是真正的问题。为什么在单例中有静态属性?根据定义,进程中应该只有一个单例实例,这使得静态属性(除了用于保存单例实例的静态属性)毫无意义。