将C#DataTable绑定到WPF DataGrid时允许使用哪些列名?

问题描述:

我正在编写一些UI,它需要从另一个库中获取C#DataTable,并尝试将其显示在WPF DataGrid中。当DataTable中的列有特殊字符(例如.[])时,这会导致绑定错误(对用户,行显示错误或缺失数据)。我也许可以尝试替换特殊字符,因此我的问题:将C#DataTable绑定到WPF DataGrid时允许使用哪些列名?

有什么是合法的列名称,什么可能会导致绑定错误?

在这个简单的代码,我已经创建了一个带有DataGrid一个WPF形式,它结合到DataTable

public DataTable Table { get; private set; } 

public MainWindow() 
{ 
    // Set up a table 
    Table = new DataTable(); 
    Table.Columns.Add("a"); 
    Table.Columns.Add("a.1"); 
    Table.Columns.Add("a[]"); 
    Table.Rows.Add("1", "2.", "3."); 
    InitializeComponent(); 

    DataContext = this; 
} 

上面的代码产生以下绑定错误:

System.Windows.Data Error: 40 : 
BindingExpression path error: '[]' property not found on 'object' ''String' (HashCode=-842352753)'. BindingExpression:Path=a[]; DataItem='DataRowView' (HashCode=44777048); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') 
System.Windows.Data Error: 40 : 
BindingExpression path error: '1' property not found on 'object' ''String' (HashCode=-842352753)'. BindingExpression:Path=a.1; DataItem='DataRowView' (HashCode=14413736); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') 

由于!

+0

我花了一点时间研究这个,看看我能否找到任何相关的东西 - 最近我发现是[这里](https://stackoverflow.com/questions/24679884/binding-datatable-to-a -datagrid-first-two-columns-empty-no-matter-what)其中@ZoAnimus表示_“如果列名中有特殊字符或标点符号,则wpf Datagrids会出现问题如果删除这些字符,它应该按预期方式运行。“_。 –

+0

考虑到问题的性质,很明显问题在于WPF正在使用正常的字符串路径分析逻辑来解释这些名称。所以你实际寻找的引用是WPF绑定路径文档。需要避免解析器将解析的任何“特殊字符”。 –

+0

同意@Peter,谢谢,不幸的是我一直无法找到该文档。你有什么建议吗?谢谢! –

在绑定和查找propery期间存在一些反映,这意味着您无法指定列名,在反射期间会导致“语法错误”。 https://msdn.microsoft.com/en-us/library/bb613546(v=vs.110).aspx

+0

谢谢,这是非常有用的!,但不幸的是,这个链接并没有给我一个清楚的画面,说明哪些类的字符会导致语法错误。游玩已经显示。和[]是困难的;但有没有更好的文档显示准确的语法允许? –

+0

您可以查看有关属性名称的语言规范:https://www.microsoft.com/en-us/download/confirmation.aspx?id=7029,章节2.4.2 – Dexion

+0

Thanks @ Dexion-这与Peter的答案相结合早些时候给我一个清晰的画面。 –