我的应用程序中有一个 WPF Datagrid,我将 ItemSource 的值设置为我构建的 DataTable 的 DefaultView。问题在于,每当我将 DataTable 中的一列的 ColumnName 设置为包含“/”的字符串时,标题会显示在 DataGrid 控件中,但值不会显示。我该如何解决这个问题?
This is the same table with the '/' replaced with '-'
顺便说一句,带有“.”的标头似乎也会发生这种情况。在他们中。因此任何小数都会导致相同的行为。
我的网格定义为
<DataGrid x:Name="dgLFKPI" />
我正在后面的代码中设置值(是的,它应该在视图模型和 MVVM 中,但它是一个遗留应用程序,正在慢慢地朝着这个方向发展)。
dgLFKPI.ItemsSource = dt.DefaultView;
绑定路径解析器错误地解析了列名称中的特殊字符。
所以一列绑定到3/4
实际上只绑定到属性3
,而不是财产3/4
。 (与.
捆绑)
当它运行时,您可能会在调试窗口中看到绑定错误,这应该说同样的事情。
System.Windows.Data 错误:40:BindingExpression 路径错误:
在“对象”“DataRowView”上找不到“3”属性
根据这个答案 https://stackoverflow.com/a/4790756/302677
有许多不同的字符具有特殊的含义
在包含句号 ('.')、斜杠 ('/')、方格的绑定路径中
中括号 ('[',']') 和圆括号 ('(',')'),圆括号将
导致您的应用程序崩溃。这些特殊字符可以通过以下方式转义
用方括号包围绑定路径。更多信息
关于路径和字符转义可以在[Binding
声明概述][2]
该链接的问题还包含一个好的解决方案 https://stackoverflow.com/a/15553960/302677用于处理想要使用自动生成列的网格。
Use the AutoGeneratingColumn
事件,并手动为名称中包含这些特殊字符的列创建绑定,以使用方括号对其进行转义。
<DataGrid x:Name="dgLFKPI"
AutoGeneratingColumn="dgLFKPI_AutoGeneratingColumn" />
private void dgLFKPI_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName.Contains('/') && e.Column is DataGridBoundColumn)
{
var col = e.Column as DataGridBoundColumn;
col.Binding = new Binding(string.Format("[{0}]", e.PropertyName));
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)