2013-10-03 70 views
2

WPF的新手,並在以下方面努力:在Singleton的靜態屬性上實現INotifyPropertyChanged?

StatusBarItem顯示一個簡單的計時器(自加載窗口後的秒數)。綁定源屬性和後臺DispatcherTimer都坐在Singleton類中,並且是靜態的,這看起來合理,因爲每個應用程序只有一個StatusBar。該類實現INotifyPropertyChanged,因爲它是對StatusBarItem的單向綁定。

WPF 4.5可以使用靜態事件(see here)綁定到靜態屬性。

這不起作用,因爲INotifyPropertyChanged不是靜態的,所以事件不能是靜態的,所以屬性不能是靜態的。解決方案是保持計時器靜態,但使屬性不是靜態的。

如果不能依賴於INotifyPropertyChanged,將綁定引入到4.5中的靜態屬性有什麼意義?有沒有靜態版本的INotifyPropertyChanged?我必須錯過一些東西,但不知道是什麼。謝謝你的澄清。

回答

1

是的,您錯過了一些東西,您鏈接的頁面描述瞭如何定義通知WPF靜態屬性已更改的事件。

一個屬性名爲myProperty的,無論是創建一個事件如下

public static event EventHandler MyPropertyChanged; 

或稱爲

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged 

INotifyPropertyChanged的一般事件,不用於靜態屬性只有aboved命名的事件

之一
+0

謝謝。我會責怪重複INotifyPropertyChanged的文檔,像一個口頭禪,但從來沒有說過要避免它的靜態屬性。 –

1

您不需要實現INotifyPropertyChanged接口,只需在文檔中聲明事件。

0

你可以將靜態屬性包裝在一個實例屬性中,但這裏的設計是真正的問題。爲什麼在單例中有靜態屬性?根據定義,在進程中應該只有一個單例的實例,使得靜態屬性(除了一個靜態屬性來保存單例的實例)毫無意義。

+0

公平點。它在WinForm世界中作爲一個靜態類而愉快地生活,並且因爲綁定而不得不成爲WPF中的單例 –