【问题标题】:What column names are allowed when binding a C# DataTable to a WPF DataGrid?将 C# DataTable 绑定到 WPF DataGrid 时允许使用哪些列名?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢,这很有帮助!但不幸的是,该链接没有让我清楚地了解哪些字符类别会导致该语法错误。到处玩耍表明。和 [] 是困难的;但是是否有更好的文档可以准确显示允许的语法?
  • 您可以查看有关属性名称的语言规范:microsoft.com/en-us/download/confirmation.aspx?id=7029,第 2.4.2 章
  • 谢谢@Dexion-这与彼得之前的回答相结合,给了我一个清晰的画面。
猜你喜欢
  • 2023-04-02
  • 2013-07-28
  • 2011-05-03
  • 2011-02-10
  • 2018-02-07
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
相关资源
最近更新 更多