将矩阵绑定到数据网格

时间:2011-09-06 08:54:32

标签: silverlight binding

我有一个名为previewTable的Datagrid。

我有一组字符串集合,代表表格数据:

ObservableCollection<ObservableCollection<string>> tableData

我还有一组表示列标题的字符串:

ObservableCollection<string> columnsHeaders

我需要使用列标题集合创建列,我在此处实现:

        foreach (string columnName in columnsHeaders)
        {
            DataGridTextColumn column = new DataGridTextColumn();
            column.Header = columnName;
            previewTable.Columns.Add(column);
        }

现在我需要将表绑定到数据。 问题是:

previewTable.ItemsSource = table

不起作用。

我总是有9个列标题,数据中的每个集合大小都是9。

帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

其他一些课程:

public class EntityDataRow
{
    public List<string> Items { get; set; }
}

public class RowItemsConverter : IValueConverter //converter for binging
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        try
        {
            var list = (List<string>) value;
            var index = (Int32) parameter;
            return list[index];
        }
        catch(Exception)
        {
            return String.Empty;
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这是你的代码(数据是EntityRow列表)

                var headers = data[0].Items;
                data.RemoveAt(0);

                PreviewGrid.Columns.Clear();
                PreviewGrid.ItemsSource = data;
                for (var i = 0; i < headers.Count; i++)
                {
                    var column = new DataGridTextColumn { Header = headers[i] };
                    var binding = new Binding("Items");
                    var converter = new RowItemsConverter();
                    binding.Converter = converter;
                    binding.ConverterParameter = i;
                    column.Binding = binding;
                    PreviewGrid.Columns.Add(column);
                }

答案 1 :(得分:0)

您可以在绑定中使用索引器,因此以下情况应该起作用: -

        int i = 0;
        foreach (string columnName in columnsHeaders)
        {
            DataGridTextColumn column = new DataGridTextColumn();
            column.Header = columnName;
            column.Binding = new Binding("[" + i.ToString(); + "]");
            previewTable.Columns.Add(column);
            i += 1;
        }