WPF DataGrid SelectionChanged Фокус ячейки отмены события - PullRequest
4 голосов
/ 17 ноября 2011

Я выполняю проверку внутри события изменения выбранной сетки данных.Если мое условие выполнено, код должен быть выполнен и выбранный элемент должен быть выделен (или получен фокус), если условие не выполнено, элемент управления должен вернуться, а ранее выбранный элемент должен остаться выбранным.

Что происходитздесь, если условие не выполнено, выбранный элемент не изменяется (который работает как требуется), но фокус все еще перемещается на выбранную ячейку, поэтому выбранный элемент ячейки - это предыдущая ячейка, в то время как находящийся в фокусе - это ячейка, котораяЯ запустил событие.

Я попробовал подход datagrid.dispatcher.invoke, но, похоже, это не работает.Также я попытался установить datagrid.selectedindex = e.removeditem [0], который снова приводит элемент управления в событие изменения выбора, таким образом, помещая в непрерывный цикл.

Пожалуйста, предложите что-нибудь.

РЕДАКТИРОВАТЬ :

dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
   if (!IsDirty) 
   { 
       if (e.AddedItems.Count > 0) 
       { 
          SelectedProfile = e.AddedItems[0] as profile; 
       } 
       if (e.RemovedItems.Count > 0) 
       { 
       } 
   }
   else 
   {
      MessageBox.Show("Save the profile selected", MessageBoxButton.OK, MessageBoxImage.Warning); 
      return; 
   } 
}

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

Предотвратить цикл.

void OnSelectionChanged(Object sender, SelectionChangedEventArgs e)
{
    // condition code
    if (conditionFailed)
    {
        datagrid.SelectionChanged -= OnSelectionChanged;
        datagrid.Selectedindex = e.Removeditem[0];
        datagrid.SelectionChanged += OnSelectionChanged;
    }
}
0 голосов
/ 12 декабря 2011

Решил мою проблему.

Что нужно было сделать, это включить грязный флаг на событии textbox_PreviewKeyDown() а затем выполнить грязную проверку на событии datagrid_PreviewMouseLeftButtonDown().

Если найдено «грязный», установите значение e.handled=true, чтобы элемент управления пропускал выполнение кода для этого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...