8

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

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

Итак, есть ли способ вернуть PropertyGrid для обновления из событий PropertyChanged?

ответ

0

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

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

+0

Я знаю, что этот ответ два года, но у меня был тот же вопрос, что и у OP, и я хочу добавить к этому ответу, что у Timer есть свойство AutoReset. Это означает, что вам не нужно вручную останавливать таймер. :-) –

31

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

[RefreshProperties(RefreshProperties.All)] 

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

+0

Отлично! Почему это не принятый ответ? – Dennis

+0

Потому что это было опубликовано около 8 месяцев. – flarn2006

+1

** Исправлено почти все проблемы. ** «INotifyPropertyChanged» требует нескольких обвинений, в то время как сортировка «RefreshProperties» фактически обходит все это (медленнее, кажется, на моей машине, но, похоже, никогда не терпит неудачу) Спасибо! –