Нужно привязать к таблице коллекцию, элементы которой являются массивами. Т.е. каждый столбец таблицы соответствует позиции в массиве.
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();
В чём тут дело?