Событие DataGrid.BeginningEdit не срабатывает, когда я использую TextBox в DataGridTemplateColumn.CellTemplate

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

<DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBox IsReadOnly="{Binding IsReadOnly}"  BorderThickness="0" Text="{Binding Value, UpdateSourceTrigger= LostFocus}"></TextBox>
   </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Поэтому, в зависимости от свойства только для чтения объекта модели, ячейка будет редактируемой или нет. Это работает отлично. Но теперь я хочу выполнить некоторую операцию, когда пользователь начинает редактировать ячейку, поэтому я создал обработчик для события BeginningEdit для DataGrid. Но обработчик события не вызывается. Я заменил TextBox на DataGridCell. Теперь обработчик события вызывается, но я не могу редактировать значение ячейки. Итак, как мне решить эту проблему.

1 ответ

Решение

Это шаблонредактирования ячеек, который применяется, когда ячейка переводится в режим редактирования, то есть когда BeginningEdit событие происходит, поэтому вы должны добавить свой TextBox к этому:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Value}"></TextBlock>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox IsReadOnly="{Binding IsReadOnly}"  BorderThickness="0" 
                     Text="{Binding Value, UpdateSourceTrigger= LostFocus}"></TextBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Другие вопросы по тегам