【发布时间】:2016-07-06 04:37:37
【问题描述】:
我正在编写一些 UI,它从另一个库中获取 C# DataTable,并尝试在 WPF DataGrid 中显示它。当DataTable 中的列具有特殊字符(例如. 或[])时,这会导致绑定错误(以及对用户而言,行显示错误或丢失数据)。我也许可以尝试将特殊字符替换掉,所以我的问题是:
是否有关于什么是列名合法的参考,以及什么可能导致绑定错误?
在这个简单的代码中,我创建了一个带有 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')
谢谢!
【问题讨论】:
-
我花了一些时间研究这个,看看我是否能找到任何相关的东西——我找到的最接近的是here @ZoAnimus 说 "wpf Datagrids 如果有特殊字符会出现问题或列名中的标点符号。如果删除这些字符,它应该会按预期工作。".
-
鉴于问题的性质,很明显问题在于 WPF 正在使用其正常的字符串路径解析逻辑来解释这些名称。因此,您实际要查找的参考资料是 WPF 绑定路径文档。需要避免解析器解释的任何“特殊字符”。
-
同意,@Peter,谢谢 - 不幸的是,我无法找到该文档。你有什么指示吗?谢谢!
-
Binding Declarations Overview 有语法概述,PropertyPath XAML Syntax 有更详细的讨论。
-
太好了,谢谢@Peter!
标签: c# wpf data-binding