【发布时间】:2014-08-25 07:22:07
【问题描述】:
我正在使用 WPF 数据网格来显示使用 MVVM 的详细信息。此数据网格的列在运行时根据用户动态定义。它工作正常。但是,我需要在此数据网格中动态包含“复选框”列以及现有字段。我使用了以下代码。
...
foreach (var column in collection)
{
GridColumnAdd(gridView, column);
}
...
private static void GridColumnAdd(DataGrid gridView, DataGridColumns columnName)
{
if (columnName.DisplayColumnName == "Print")
{
var column = new DataGridCheckBoxColumn();
column.Header = columnName.DisplayColumnName;
column.Binding = new Binding();
var binding = (column.Binding as Binding);
binding.Mode = BindingMode.TwoWay;
if (binding != null)
{
IValueConverter converter = binding.Converter = new ColumnValueConverter(); // Will work here
binding.ConverterParameter = columnName.BindingPropertyName;
}
gridView.Columns.Add(column);
}
else
{
var column = new DataGridTextColumn();
column.IsReadOnly = true;
column.Header = columnName.DisplayColumnName;
column.Binding = new Binding();
var binding = (column.Binding as Binding);
if (binding != null)
{
IValueConverter converter = binding.Converter = new ColumnValueConverter(); // Will work here
binding.ConverterParameter = columnName.BindingPropertyName;
}
gridView.Columns.Add(column);
}
}
运行此程序时,我收到以下异常“双向绑定需要路径或 XPath”。
您能帮我在现有的数据网格列中动态包含复选框列吗?
【问题讨论】:
-
为什么不从 xaml 添加列。我的意思是是否需要在 C# 代码后面的代码中定义列?
-
是的,根据用户,我们在数据网格中显示列。因此,复选框是某些用户的必填列之一。
-
错误很明显,你需要定义一个路径来定义双向绑定,我看不到你的代码中定义的任何路径。