В событии MyDatagrid_CellEditEnding(...)
(показано ниже) я фиксирую отредактированное значение ячейки всякий раз, когда ячейка одного из трех столбцов редактируется пользователем. После редактирования ячейки во втором или третьем столбце, когда я выхожу из этой ячейки, я вижу, как вызывается событие CellEditEnding
. Но это неверно для первого столбца, который является столбцом DataGridTemplateColumn
. То есть, когда я меняю дату в любой ячейке в первой DataGridTemplateColumn
и перемещаю курсор из ячейки, событие CellEditEnding
не вызывается.
Вопрос : Что мне здесь может не хватать и как мы можем заставить это работать? Я видел похожие проблемы и их решения в Интернете (например, this и this ), поэтому я не уверен, что мне здесь может не хватать.
Примечание : я использую последние версии VS2019
и .NET Core 3.1
на Windows 10 vs1903 - Pro
<Window x:Class="MyTestApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
.....
Title="MainWindow">
<Grid>
<DataGrid x:Name="MyDatagrid" AutoGenerateColumns="False" SelectionMode="Single" CellEditEnding="MyDatagrid_CellEditEnding">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Date Modified">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateModified}" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateModified}" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
<DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="btnTest" Content="Test" HorizontalAlignment="Left" VerticalAlignment="Top" Click="btnTest_Click"/>
</Grid>
</Window>
Код :
......
......
string _sDateModified;
string _sFirstName;
string _sLastName;
.....
.....
private void MyDatagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
DataGridColumn c = e.Column;
if (c.Header.ToString() == "Date Modified")
_sDateModified = (e.EditingElement as TextBox).Text;
else if (c.Header.ToString() == "First Name")
_sFirstName = (e.EditingElement as TextBox).Text;
else if (c.Header.ToString() == "Last Name")
_sLastName = (e.EditingElement as TextBox).Text;
}