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

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

У меня есть 3 класса, A, B, C.

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

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

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

Источником моих элементов для элемента управления сеткой является список класса А. Так как я намерен показать некоторые значения из всех классов в этой иерархии.

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 и не могу понять, почему это не работает.Может кто-нибудь, пожалуйста, помогите?

Спасибо.

1 Ответ

0 голосов
/ 27 ноября 2018

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

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

Предположим, что 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"); ]

...