У меня есть ячейка в сетке данных, которую я редактирую.Когда редактирование ячейки закончено, я использую событие CellEditEnding в сетке, чтобы зафиксировать это и выполнить некоторую проверку.Если проверка не удалась, мне нужно оставить курсор в этой ячейке и не переходить к следующей.Как вы можете видеть, я устанавливаю для параметра Cancel значение true, но все, что нужно сделать, это сохранить ячейку в режиме редактирования и, тем не менее, позволить курсору перейти к следующей ячейке.Мне нужен способ держать курсор в ячейке, пока все не будет в порядке.
xaml:
<DataGrid Style="{StaticResource ApplicationTabDataGridStyle}"
ItemsSource="{Binding CurrentContacts, Mode=TwoWay}"
SelectedValue="{Binding AddressGridItemSelected}"
x:Name="ChangeInfoAddressGrid">
<i:Interaction.Triggers>
<i:EventTrigger EventName="CellEditEnding">
<command:EventToCommand PassEventArgsToCommand="True"
Command="{Binding ValidateAddressRowCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn Header="Address 1" MinWidth="60"
Binding="{Binding Addr1, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
IsReadOnly="{Binding Data.AddressGridItemSelected.CanEdit,
Converter={StaticResource boolToOppositeBoolConverter},
Source={StaticResource IsReadyOnlyProxy}}">
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="TextBox">
<Setter Property="MaxLength" Value="26" />
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
...
</DataGrid.Columns>
</DataGrid>
c #
public RelayCommand<object> ValidateAddressRowCommand => new RelayCommand<object>(ValidateAddressRow);
private void ValidateAddressRow(object eventArgs)
{
var cellEventArgs = eventArgs as DataGridCellEditEndingEventArgs;
// DO SOME VALIDATION
...
cellEventArgs.Cancel = true;
cellEventArgs.EditingElement.Focus();
}