Как можно динамически изменять определения строк и столбцов сетки WPF?

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

Я получил элемент управления от Grid, который имеет два свойства для дескрипторов строк и столбцов и строит гирд-строки и столбцы на основе этой информации. Он также подписывается на события изменения списка двух коллекций дескрипторов, чтобы обновлять себя, если пользователь динамически добавляет или удаляет строки или столбцы.

И здесь возникает проблема: когда я пытаюсь изменить определения строки или столбца в gird, я получаю исключение, сообщающее, что коллекция доступна только для чтения. Поэтому я предполагаю, что невозможно изменить определение после того, как сетка была создана и показана один раз. Любые идеи?

И на всякий случай — все привязано к данным. Существует (динамическая) коллекция таблиц, каждая из которых содержит собственные (динамические) определения строк и столбцов, а также данные, введенные для каждой ячейки.


person Daniel Brückner    schedule 17.10.2010    source источник


Ответы (1)


Я провел быстрый тест и смог без проблем добавлять строки и столбцы в Grid во время выполнения с помощью кода, используя коллекции RowDefinitions и ColumnDefinitions. Я не думаю, что привязки имеют какое-то отношение к проблеме.

Если, с другой стороны, вы имели в виду DataGrid, то да, это немного меняет дело.

person Alex Paven    schedule 17.10.2010
comment
Вы правы - коллекции можно модифицировать. Я получил несколько уведомлений об изменениях из измененного списка дескрипторов, и первое из них правильно обновило определения строк и столбцов. Второй не удалось, потому что теперь коллекция помечена как доступная только для чтения. Я не знаю (и не исследовал), почему это так работает, но для моего сценария все нормально - я просто ничего не делаю, если определения стали доступны только для чтения, потому что все необходимые изменения уже сделаны с первого раза. В какой-то момент после выполнения моего кода коллекции снова становятся модифицируемыми и позволяют вносить дальнейшие изменения в сетку. - person Daniel Brückner; 17.10.2010