Silverlight DataGrid动态复选框列需要单击事件

时间:2009-03-25 18:12:34

标签: silverlight

我有一个绑定到observablecollection对象的数据网格。该集合可以是Foo的集合或Bar对象的集合。 Foo和Bar具有不同数量的属性,因此在数据网格中应具有不同数量的列。

因此我在数据网格中动态创建列:

 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);

在创建所有模板并将它们添加到DataGrid后,我将数据绑定到DataGrid。显示正确的数据。我的问题是我没有收到选中复选框的通知。

如果我添加

点击=“CheckBox_Checked”,

我收到以下错误:

  

Sys.InvalidOperationException:控件'sl_Main'中的ManagedRuntimeError错误#4004: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)位于System.Windows.Controls.DataGrid的System.Windows.DataTemplate.LoadContent()的MS.Internal.XcpImports.DataTemplate_LoadContent(DataTemplate模板)中的MS.Internal.XcpImports.MethodEx(DependencyObject obj,String name)。系统中的System.Windows.Controls.DataGrid.CompleteCellsCollection(DataGridRow dataGridRow)中的System.Windows.Controls.DataGrid.AddNewCellPrivate(DataGridRow行,DataGridColumn列)中的PopulateCellContent(Boolean forceTemplating,Boolean isCellEdited,DataGridColumn dataGridColumn,DataGridRow dataGridRow,DataGridCell dataGridCell) System.Windows.Controls.DataGrid.RefreshR上的System.Windows.Controls.DataGrid.AddRows(Int32 rowIndex,Int32 rowCount)中的.Windows.Controls.DataGrid.GenerateRow(Int32 rowIndex) System.Windows.FrameworkElement.MeasureOverride上的System.Windows.Controls.DataGrid.MeasureOverride(Size availableSize)中的System.Windows.Controls.DataGrid.RefreshRowsAndColumns()处的ows(布尔值recycleRows)(Int in InTtr nativeTarget,Single inWidth,Single inHeight,Single&amp; ; outWidth,Single&amp; outHeight)

任何想法?

谢谢,

瑞克

2 个答案:

答案 0 :(得分:1)

您无法使用已设置的事件处理程序动态加载XAML。

在这种情况下,我不会动态添加模板。相反,我会在用户控件的资源中创建两个数据模板,并让它们键入绑定到网格的数据类型。

答案 1 :(得分:0)

您可以在代码中设置subcass复选框,并通过覆盖click方法添加事件处理程序。 在你的xaml模板中使用你的子类复选框而不是标准的CheckBox类。