WPF Datagrid绑定错误与列标题中的点

我有一个.Net数据表,我用它作为WPF数据网格的源。 我遇到的问题是数据表中的一些列标题包含点。 将数据表绑定到数据网格时,将显示包含点的列,但不包含任何数据。

在网上阅读后,我发现点是数据绑定引擎中使用的特殊符号,并且混淆了数据网格对表的绑定。

我试过手动创建datagrid列+绑定并添加方括号来否定点。 这工作正常,但在我对列进行排序时会中断。 本文提到挂钩到排序事件以删除排序事件上的[]。 没有太多关于如何实现这一点的细节,我所做的尝试似乎没有摆脱错误。

如果您需要更多信息,请告诉我。

Magnus Montin 在Microsot WPF论坛上解决了这个问题 :

AutoGeneratedColumns在实际场景中很少使用。 但您也可以处理AutoGeneratingColumn事件:

  private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { e.Column = new DataGridTextColumn() { Header = e.PropertyName, Binding = new Binding("[" + e.PropertyName + "]") }; } 

无论如何,这种视图相关的代码肯定属于视图。 视图模型不知道也不关心DataGrid控件由于某种原因无法显示实际数据的事实。 必须在视图中修复此问题。

它就像一个魅力! 我的例子开始起作用了:

XAML:

  

代码背后:

 private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { e.Column = new DataGridTextColumn() { Header = e.PropertyName, Binding = new Binding("[" + e.PropertyName + "]") }; } 

视图模型:

 private DataTable employeeDataTable; public DataTable EmployeeDataTable { get { return employeeDataTable; } set { employeeDataTable = value; OnPropertyChanged("EmployeeDataTable"); } } private void PopulateDataTable() { var _ds = new DataSet("Test"); employeeDataTable = new DataTable(); employeeDataTable = _ds.Tables.Add("DT"); for (int i = 0; i < 800; i++) { if(i%2==0) employeeDataTable.Columns.Add(i.ToString() + "."); else employeeDataTable.Columns.Add(i.ToString() + "/"); } for (int i = 0; i < 2; i++) { var theRow = employeeDataTable.NewRow(); for (int j = 0; j < 800; j++) { if (j % 2 == 0) { //theRow[j] = j.ToString(); theRow[j] = "a"; } else theRow[j] = CreateDoubleValue(j).ToString(); } employeeDataTable.Rows.Add(theRow); } } 

正如您所发现的那样,除了Binding以外的任何其他点符号都是WPF的问题。 我建议修改标题以使用点表示法别名列名称:

 Col.A should be Col_A Col.B should be Col_B etc... 

如果标头来自直接SQL查询,请以相同方式为sql列名称添加别名。

走下使用点符号的路径将继续导致一个hackish修复解决之前的’修复’。 只需修改命名约定即可轻松解决所有这些问题。