I have a datagrid that's bound to an observablecollection object. The collection may be a collection of Foo or a collection of Bar objects. Foo and Bar have different number of properties and therefore should have a different number of columns in the Data Grid.
Because of this I am dynamically creating the columns in my data grid:
var cellEditTemplate = new StringBuilder();
cellEditTemplate.Append("<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' >");
cellEditTemplate.Append(
"<CheckBox VerticalAlignment=\"Center\" IsThreeState=\"False\" IsChecked=\"{Binding ");
cellEditTemplate.Append(bindName);
cellEditTemplate.Append(", Mode=TwoWay}\"/>");
cellEditTemplate.Append("</DataTemplate> ");
var dataTemplate = ((DataTemplate) XamlReader.Load(cellEditTemplate.ToString()));
var column = new DataGridTemplateColumn
{
CellEditingTemplate = dataTemplate,
Header = title
};
grdCheckList.Columns.Add(column);
After I create all of the templates and add them to the DataGrid, I bind the data to the DataGrid. The correct data shows up. My problem is that I don't get notification of when the checkbox is checked.
If I add
Click="CheckBox_Checked",
I get the following error:
Sys.InvalidOperationException: ManagedRuntimeError error #4004 in control 'sl_Main': System.Windows.Markup.XamlParseException: AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 1 Position: 110] at MS.Internal.XcpImports.MethodEx(IntPtr ptr, String name, CValue[] cvData) at MS.Internal.XcpImports.MethodEx(DependencyObject obj, String name) at MS.Internal.XcpImports.DataTemplate_LoadContent(DataTemplate template) at System.Windows.DataTemplate.LoadContent() at System.Windows.Controls.DataGrid.PopulateCellContent(Boolean forceTemplating, Boolean isCellEdited, DataGridColumn dataGridColumn, DataGridRow dataGridRow, DataGridCell dataGridCell) at System.Windows.Controls.DataGrid.AddNewCellPrivate(DataGridRow row, DataGridColumn column) at System.Windows.Controls.DataGrid.CompleteCellsCollection(DataGridRow dataGridRow) at System.Windows.Controls.DataGrid.GenerateRow(Int32 rowIndex) at System.Windows.Controls.DataGrid.AddRows(Int32 rowIndex, Int32 rowCount) at System.Windows.Controls.DataGrid.RefreshRows(Boolean recycleRows) at System.Windows.Controls.DataGrid.RefreshRowsAndColumns() at System.Windows.Controls.DataGrid.MeasureOverride(Size availableSize) at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Single inWidth, Single inHeight, Single& outWidth, Single& outHeight)
any ideas?
Thanks,
Rick