Многоуровневая привязка данных (привязка списка списков) для столбцов в GridControl

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

У меня 3 класса, А, В, С.

A имеет некоторые свойства и список типа B.

B имеет некоторые свойства и список типа C.

C имеет несколько свойств, одним из которых является MyName (общедоступное).

Моим источником элементов для элемента управления сеткой является список класса A, поскольку я намереваюсь показать некоторые значения из всех классов в этой иерархии.

List<A> abc = new List<A>();
...
MyGrid.ItemsSource = abc;

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

GridColumn newColumn = new GridColumn();
newColumn.Binding = new Binding("B.C.MyName");
newColumn.Header = "Name field";
myBand.Columns.Add(newColumn);
MyGrid.Bands.Add(myBand);
...

Я не вижу записи данных в колонке, но колонка вместе с бэндом присутствует в сетке. Ряды пустые.

Я относительно новичок в концепции Binding и не могу понять, почему это не работает. Кто-нибудь может помочь?

Спасибо.


person aman    schedule 26.11.2018    source источник
comment
Я думаю, вы имели в виду Header вместо FieldName. Использование FieldName будет конфликтовать с привязкой.   -  person DonBoitnott    schedule 26.11.2018
comment
@DonBoitnott Использование Header вместо FieldName также не помогло. Правилен ли мой подход к связыванию?   -  person aman    schedule 27.11.2018


Ответы (1)


Я нашел решение методом проб и ошибок.

Итак, чтобы создать соответствующие полосы и столбцы, я перебирал списки.

Предположим, что i используется для итерации по списку B, а j используется для итерации по списку C (который содержится в B, как описано в вопрос).

Чтобы привязать свойство C к определенному столбцу, нам нужно сделать следующее:

... newColumn.Binding = new Binding(String.Format("B[{0}].C[{1}].MyName", i, j)); ... myBand.Columns.Add(newColumn); ...

Остальное остается прежним.

Я упустил возможность определить из источника данных, какие элементы списка нам нужно учитывать для привязки к столбцу. String.Format() делает это для меня [ Column.Binding = new Binding("path"); ]

person aman    schedule 27.11.2018