2013-10-03 3 views
2

Новое в WPF и борется со следующим:Реализация INotifyPropertyChanged на статическом свойстве в Singleton?

StatusBarItem отображает простой таймер (секунды с момента загрузки окна). Свойство источника привязки и поддержка DispatcherTimer находятся в классе Singleton и являются статическими, что представляется разумным, поскольку для каждого приложения имеется только один StatusBar. Класс реализует INotifyPropertyChanged, поскольку это односторонняя привязка к StatusBarItem.

WPF 4.5 может связываться со статическими свойствами, используя статические события (see here).

Это не работает, потому что INotifyPropertyChanged не является статическим, поэтому событие не может быть статическим, поэтому свойство не может быть статическим. Решение состоит в том, чтобы сохранить таймер статическим, но сделать свойство не статическим.

В чем смысл введения привязки к статическим свойствам в 4.5, если они не могут полагаться на INotifyPropertyChanged? Есть ли статическая версия INotifyPropertyChanged? Я должен что-то упустить, но не знаю, что. Спасибо за любые разъяснения.

ответ

1

Да, вы что-то упустили, страница, на которую вы ссылаетесь, описывает, как вы определяете события, которые уведомляют WPF о том, что статическое свойство было изменено.

свойства под названием MyProperty, либо создать событие, как показано ниже

public static event EventHandler MyPropertyChanged; 

или родового мероприятие под названием

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged 

INotifyPropertyChanged НЕ используется для статических свойств только один из вышесказанному названных событий

+0

Спасибо. Я обвиню документацию, которая повторяет INotifyPropertyChanged как мантру, но никогда не говорит, чтобы избежать ее для статических свойств. –

1

Вам не нужно реализовывать интерфейс INotifyPropertyChanged, просто объявляйте события, как в документации.

0

Вы можете обернуть статическое свойство в свойство экземпляра, но дизайн здесь является настоящей проблемой. Почему статические свойства в одноэлементном? По определению, в процессе должен быть только один экземпляр singleton, что делает статические свойства (отличные от статического свойства для хранения экземпляра singleton) бессмысленными.

+0

Справедливая точка. Он жил счастливо как статический класс в мире WinForm и должен был стать синглом в WPF из-за привязки –

Смежные вопросы