我的应用程序中有一个WPF Datagrid,其中将ItemSource的值设置为所构造的DataTable的DefaultView。问题在于,每当我将DataTable中列之一的ColumnName设置为包含'/'的字符串时,标题就会显示在DataGrid控件中,但值不会显示。我该如何解决?
这是同一表,用“ /”替换为“-”
顺便说一句,这似乎也发生在带有“。”的标题中。在他们之中。因此,任何小数将导致相同的行为。
我的网格定义为
<DataGrid x:Name="dgLFKPI" />
并且我在后面的代码中设置了值(是的,应该在视图模型和MVVM中,但是它是一个以这种方式缓慢运行的旧版应用程序)。
dgLFKPI.ItemsSource = dt.DefaultView;
绑定路径解析器错误地解析了列名中的特殊字符。
因此,绑定到的列3/4
实际上仅绑定到属性3
,而不绑定到属性3/4
。(与.
绑定相同)
在调试窗口运行期间,您可能会看到绑定错误,应该说出同样的事情。
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“ DataRowView”上找不到“ 3”属性
根据这个答案
在绑定路径中,有许多不同的字符具有特殊含义,包括句号('。'),斜杠('/'),方括号('[',']')和括号('(',' )'),括号会导致您的应用崩溃。这些特殊字符可以通过用方括号括起来的绑定路径来转义。有关路径和字符转义的更多信息,请参见[绑定声明概述] [2]。
这个链接的问题还为处理要使用自动生成的列的网格提供了一个很好的解决方案。
使用该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));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句