Как привязать источник элементов WPF Datagrid к коллекции коллекций?

Каков наилучший подход для привязки WPF DataGrid ItemsSource к ObservableCollection из ObservableCollections?

e.g.

public ObservableCollection<ObservableCollection<MyDataItem>> DataValues = new ObservableCollection<ObservableCollection<MyDataItem>>();

где MyDataItem может выглядеть так:

public class MyDataItem
{
    public string Caption { get; set; }
    public string DataValue { get; set; }
}

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

Можно ли динамически привязать каждый столбец к свойству DataValue объектов MyDataItem или мне нужно упаковать данные в более простую структуру для привязки?


person GlitterMonkey    schedule 08.01.2010    source источник


Ответы (1)


Это возможно, если использовать класс, производный от коллекции, в качестве внутреннего объекта и реализовать на нем ICustomTypeDescriptor - см. Аналогичный вопрос SO по теме (с тегом Silverlight, но с той же идеей)

Silverlight DataGrid - привязка к коллекции Коллекции предметов.

person Aviad P.    schedule 08.01.2010
comment
Есть ли способ сделать это без изменения внутреннего объекта? Я получил эту иерархию объектов из другой области приложения, и мне было любопытно, есть ли способ привязать к ней напрямую, не изменяя ее. - person GlitterMonkey; 09.01.2010
comment
Не то чтобы я ничего не знал. Вы должны представить свою внутреннюю коллекцию как отдельный объект, у которого есть одно свойство для каждого элемента коллекции. Насколько я понимаю, это может быть достигнуто только путем «обертывания» вашей внутренней коллекции, как я предлагал. Или, если вы склонны использовать динамику (функция .NET 4.0) - вы можете реализовать ее более простым способом (но она все равно будет обертывать, т.е. определять дополнительный тип вместо внутренней коллекции). - person Aviad P.; 09.01.2010