Как привязать коллекцию ExpandoObjects к Data Grid?

Я пытаюсь прочитать таблицу из файла Excel (.xls) и отобразить ее в DataGrid. Таблица имеет неизвестные размеры, и каждый столбец содержит значения одного неизвестного типа (string, double или int).

Я получаю доступ к файлу через COM и помещаю таблицу в Список ‹> ExpandoObjects. Когда я устанавливаю DataGrid.ItemSource в список, сетка остается визуально пустой. Явное определение столбцов и их привязки данных приводит к сообщению среды выполнения о том, что приложение не может найти указанные свойства в ExpandoObjects.

Как я могу отобразить таблицу в GridView? Я работаю с Silverlight 5 RC и надеялся найти простой способ сделать это. По крайней мере, проще, чем решения, которые я видел до сих пор для Silverlight 2 и 3.


person himmelsfisch    schedule 26.10.2011    source источник
comment
Владимир Бодуров решает похожую проблему в своей статье Как для привязки Silverlight DataGrid из IEnumerable в IDictionary путем преобразования каждого ключа словаря в свойство анонимно типизированного объекта. Однако его решение очень велико и для Silverlight 1.   -  person himmelsfisch    schedule 26.10.2011


Ответы (2)


Если он динамический и не реализует ICustomTypeProvider, в Silverlight 5 привязка не выполняется. Это действительно прискорбно, поскольку у нас есть динамическая привязка данных в WPF, и в случае, если свойства могут быть известны (например, Expando), даже написать CustomType, который будет работать для любого поставщика IDynamicMetaObject, не сложно, не говоря уже о том, что они могли бы просто добавить его для Expando, тем более что он запечатан.

Итак, суть в том, что вам нужно написать свой собственный динамический тип, реализующий ICustomTypeProvider

person jbtule    schedule 26.10.2011

Я понял, что работает нормально. для меня. Я заменил ExpandoObjects на словари и использовал класс Бодурова для преобразования списка во что-то, что может обрабатывать DataGrid.

person himmelsfisch    schedule 27.10.2011