Для столбца флажка Silverlight DataGrid Dynamic требуется событие щелчка

У меня есть сетка данных, привязанная к объекту наблюдаемой коллекции. Коллекция может быть коллекцией 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. ) в MS.Internal.XcpImports.MethodEx (объект DependencyObject, имя строки) в MS.Internal.XcpImports.DataTemplate_LoadContent (шаблон DataTemplate) в System.Windows.DataTemplate.LoadContent () в System.Windows.Controls.DataCanell.Populate ( forceTemplating, логическое значение isCellEdited, DataGridColumn, dataGridColumn, DataGridRow, dataGridRow, DataGridCell, dataGridCell) в System.Windows.Controls.DataGrid.AddNewCellPrivate (строка DataGridRow, столбец DataGridColumns (столбец DataGridColumn) в System.Windows.Control, столбец данных Controls.DataGrid.GenerateRow (Int32 rowIndex) в System.Windows.Controls.DataGrid.AddRows (Int32 rowIndex, Int32 rowCount) в System.Windows.Controls.DataGrid.RefreshRows (Boolean recycleRows) в System.Windows.Controls.DataGrid.RefreshRowsAndColumns () в System.Windows.Controls.DataGrid.MeasureOverride (Size availableSize) в System.Windows.FrameworkElement.MeasureOverride (IntPtr nativeightTarget, Single inWidth, Single inWidth, Single inWidth, Single inWidth, Single inWidth, Single inWidth, Single inWidth , Single & outHeight)

Любые идеи?

Спасибо,

Рик


person Rick Kierner    schedule 25.03.2009    source источник


Ответы (2)


Вы не можете динамически загружать XAML с уже настроенными обработчиками событий.

В этой ситуации я бы не стал добавлять шаблоны динамически. Вместо этого я бы создал два шаблона данных в ресурсах пользовательского элемента управления и дал бы им ключ от типа данных, привязанных к сетке.

person Matt Casto    schedule 25.03.2009
comment
Когда вы говорите "ключ" от типа привязанных данных, я сбиваюсь с толку. Если я создам шаблон данных в xaml, как мне изменить привязку для флажка во время выполнения? Я не знаю все столбцы во время разработки. - person Rick Kierner; 25.03.2009
comment
Извините, я перепутал Silverlight и WPF. В WPF вы можете установить тип DataTemplate, чтобы использовать разные шаблоны для разных типов связываемых объектов. В вашей ситуации я бы создал несколько шаблонов данных и установил тип шаблона, который будет использоваться во время выполнения. - person Matt Casto; 26.03.2009

Вы можете подклассифицировать флажок в коде и добавить обработчик событий, переопределив метод щелчка. В вашем шаблоне xaml используйте свой подклассовый флажок вместо стандартного класса CheckBox.

person Andrus Moor    schedule 20.11.2009