Задать вопрос

Binding данных в WPF

Есть WPF-ный DataGrid, в нем банальные текстовые поля, примерно вот такие:

<DataGridTextColumn Header="Азот, т" Binding="{Binding Path=AmountN, Mode=TwoWay}" IsReadOnly="True"></DataGridTextColumn>

К нему прикручена ObservableCollection, элементом которой является просто класс с набором свойств.

Приведенная выше колонка является вычисляемой, и вычисляется при изменении юзером данных в другой колонке, по событию CellEditEnding.

Т. е. в обработчике события я меняю в коллекции некие свойства, которые должны отображаться в грид.

Коротко говоря, этого не происходит.

Говоря длинно, если сделать ячейку доступной для записи, то в тот момент, когда начинается редактирование, данные подтягиваются — то есть биндинг существует и имя колонки я указал правильно.

Далее, пытался вызывать у грида Items.Refresh(), но получил исключение, говорящее о том, что нельзя это делать в момент редактирования ячейки.
Вызов CommitEdit ничего не меняет, естественно.

Вопрос: как подсказать гриду, что пора бы обновить данные в ячейках?
  • Вопрос задан
  • 5819 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
ad1Dima
@ad1Dima
Меня несколько смущает Mode=TwoWay и IsReadOnly=«True» вместе.

В общем случае, надо уведомить биндинг о том, что свойство, к которому он привязан изменилось. Например реализовав интерфейс INotifyPropertyChanged
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@x64
Все же правильнее было бы реализовать INotifyPropertyChanged. Да и вообще сразу сделать базовый класс с его удобной реализацией и везде его таскать. Остальные решения будут в ранге более/менее удачных хаков.

Сам проверить, к сожалению не могу, а вызовы методов с «Invalidate» в имени тоже не помогают?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы