Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Rick KiernerОтветов: 2

У меня есть сетка данных, привязанная к объекту наблюдаемой коллекции. Коллекция может быть коллекцией 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)

Любые идеи?

Спасибо,

Рик

silverlight

Ответы

Ответ 1 · рейтинг 1 · Matt Casto

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

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

Ответ 2 · Andrus Moor

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы