2

WPF 新手并在以下问题上苦苦挣扎:

StatusBarItem 显示一个简单的计时器(自窗口加载以来的秒数)。绑定源属性和支持 DispatcherTimer 位于 Singleton 类中并且是静态的,这似乎是合理的,因为每个应用程序只有一个 StatusBar。该类实现了 INotifyPropertyChanged,因为它是对 StatusBarItem 的单向绑定。

WPF 4.5 可以绑定到静态属性,使用静态事件(见这里)。

这不起作用,因为 INotifyPropertyChanged 不是静态的,所以事件不能是静态的,所以属性不能是静态的。解决方案是保持计时器静态,但使属性不是静态的。

如果它们不能依赖 INotifyPropertyChanged,那么在 4.5 中引入对静态属性的绑定有什么意义?是否有 INotifyPropertyChanged 的​​静态版本?我一定错过了什么,但不知道是什么。感谢您的任何澄清。

4

3 回答 3

1

您不需要实现INotifyPropertyChanged接口,只需在文档中声明事件即可。

于 2013-10-03T16:29:15.090 回答
1

是的,您遗漏了一些东西,您链接到的页面描述了您如何定义通知 WPF 静态属性已更改的事件。

对于名为 MyProperty 的属性,可以按如下方式创建事件

public static event EventHandler MyPropertyChanged; 

或称为通用事件

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged

InotifyPropertyChanged 仅用于上述命名事件之一的静态属性

于 2013-10-03T16:30:49.993 回答
0

您可以将静态属性包装在实例属性中,但设计是这里真正的问题。为什么在单例中有静态属性?根据定义,一个进程中应该只有一个单例实例,这使得静态属性(除了保存单例实例的静态属性)毫无意义。

于 2013-10-03T16:44:46.383 回答