在C#WPF中使用Datacontext填充数据网格

时间:2010-05-18 18:34:42

标签: c# wpf datacontext

我正在尝试从文件中获取数据。该文件首先有三行描述该文件的文本,然后是下面数据的标题。我设法提取了那个。我遇到的问题是将数据放在标题行下方。标题行下面的数据可能看起来像“1 2 3 4 5 6 7 8 9 abc”。

DataGrid dataGrid1 = new DataGrid();
masterGrid.Children.Add(dataGrid1);

using (TextReader tr = new StreamReader(@filename))
{
    int lineCount = 1;
    while (tr.Peek() >= 0)
    {
        string line = tr.ReadLine();
        {
            string[] data = line.Trim().Split(' ');

            Dictionary<string, object> sensorData = new Dictionary<string, object>();

            for (int i = 0, j = 0; i < data.Length; i++)
            {
                //I know that I'm delimiting the data by a space before.
                //but the data from the text file doesn't necessarily have
                //just one space between each piece of data
                //so if I don't do this, spaces will become part of the data.
                if (String.Compare(data[i]," ") > 0)
                {
                    sensorData[head[j]] = data[i];
                    j++;
                }
            }

            sensorDatas.Add(sensorData);

            sensorData = null;

        }
        lineCount++;
    }
}

dataGrid1.DataContext = sensorDatas;

我无法弄清楚为什么这样做不起作用。如果我改变“dataGrid1.DataContext = sensorDatas;”到“dataGrid1.ItemsSource = sensorDatas;”然后我在正确的列中获取数据,但我也得到一些原始视图数据,例如:Comparer,Count,Keys,Values as columns,这是我不想要的。

有什么见解?

1 个答案:

答案 0 :(得分:3)

在WPF中的控件上使用DataContext property时,用于设置控件在填充具有与之关联的绑定的属性时将使用的数据源。

这与设置ItemsSource property以指示您希望在网格中显示的数据的非常不同。是的,仍将使用绑定,但它们以不同的方式用于网格中显示的数据,而不是用于驱动网格本身配置的数据(这是DataContext所做的)。

相反,您似乎允许网格为您自动生成列。而是指示应关闭列的自动生成,然后设置要显示的列。然后,当您设置ItemsSource时,它应该只显示您想要显示的项目。