Нужно привязать к таблице коллекцию, элементы которой являются массивами. Т.е. каждый столбец таблицы соответствует позиции в массиве.
WPF только осваиваю, поэтому пока решение в лоб:
class Data
{
public string[] S { get; set; }
}
//////////////////
List<Data> list = new List<Data>(2);
Data d = new Data { S = new string[] { "aaa1", "bbb1", "ccc1" } };
list.Add(d);
d = new Data { S = new string[] { "aaa2", "bbb2", "ccc2" } };
list.Add(d);
DataGridTextColumn c;
Binding b;
for (int i = 0; i < 3; i++)
{
c = new DataGridTextColumn();
c.Header = i.ToString();
b = new Binding("S");
b.Converter = new MyConverter(i);
c.Binding = b;
dataGrid1.Columns.Add(c);
}
dataGrid1.ItemsSource = list;
//////////////////
class MyConverter : IValueConverter
{
private int column;
public MyConverter(int column)
{
this.column = column;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((string[])value)[column];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
И для поддержки редактирования нужно ещё в конверторе хранить ссылку на DataGrid.
Добавлено через 3 дня, 14 часов, 30 минут и 30 секунд:Ещё такая проблема. Есть класс - оболочка для коллекции, например, List<Person>. Хочу, чтобы его можно было привязать к гриду через ItemsSource. Для этого реализую в своём классе интерфейс IEnumerable:
class PersonCollection : IEnumerable
{
List<Person> list;
IEnumerator Ienumerable.GetEnumerator()
{
return ((IEnumerable)list).GetEnumerator();
}
public List<Person> GetList()
{
return list;
}
}
Однако, не работает, грид пустой (точнее, добавляются пустые строки) -
dataGrid2.ItemsSource = collection;
C данными всё ок, т.к. такой вариант, естественно, пашет
dataGrid.ItemsSource = collection.GetList();
В чём тут дело?