Событие DataGrid CellEditEnding не запускается при редактировании ячейки внутри DataGridTemplateColumn - PullRequest
0 голосов
/ 05 мая 2020

В событии 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;
}

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Вы редактируете DatePicker в CellTemplate, и это не вызывает срабатывания события CellEditEnding. CellTemplate не должен содержать никаких элементов управления вводом.

Замените DatePicker в CellTemplate на TextBlock:

<DataGridTemplateColumn Header="Date Modified">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DateModified, StringFormat=yyyy-MM-dd}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <DatePicker SelectedDate="{Binding DateModified, UpdateSourceTrigger=LostFocus}" BorderThickness="0" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

Или установите IsEnabled свойство DatePicker в CellTemplate до false. В любом случае вам придется войти в режим редактирования, дважды щелкнув ячейку, прежде чем вы сможете ожидать срабатывания события CellEditEnding.

0 голосов
/ 05 мая 2020

Попробуйте следующее:

<DataGridTemplateColumn.CellEditingTemplate>
   <DataTemplate>
      <DatePicker SelectedDate="{Binding DateModified, UpdateSourceTrigger=LostFocus}" BorderThickness="0" />
   </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...