Обновление PropertyGrid - PullRequest
8 голосов
/ 25 июня 2010

Как можно автоматически обновить сетку свойств при изменении объекта в свойстве SelectedObject? Я пытался реализовать INotifyPropertyChanged в своем классе, но в сетке свойств фактически не отображаются новые свойства объекта в фоновом режиме, пока я не нажму на него.

Я пытался подписаться на событие PropertyChanged моего объекта напрямую и вызывать метод Refresh () класса PropertyGrid при его вызове. Но некоторые из моих свойств связаны между собой. Значение изменения одного свойства может вызывать несколько событий PropertyChanged. Кажется, это работает нормально, но мне все еще интересно, есть ли более чистый способ сделать это через DataBinding. Также я бы хотел избежать многократного обновления элемента управления после того, как пользователь обновил только одно свойство.

Так есть ли способ заставить PropertyGrid обновляться из событий PropertyChanged?

Ответы [ 2 ]

31 голосов
/ 10 февраля 2011

Попробуйте добавить атрибут RefreshProperties к каждому свойству с зависимостями:

[RefreshProperties(RefreshProperties.All)]

Теперь, каждый раз, когда это свойство изменяется, оно автоматически обновляет другие поля.Это гораздо более чистый подход, чем каждый раз вызывать метод Refresh () для таблицы свойств.

0 голосов
/ 25 июня 2010

Я не знаю, есть ли встроенный способ сделать это, но вот совет, если вы хотите избежать нескольких вызовов Refresh для связанных свойств:

Когда происходит событие PropertyChanged, запустите таймер. Если событие происходит снова до истечения таймера, ничего не делайте. В событии таймера Tick обновите PropertyGrid и остановите таймер

...