c# wpf表格 WPF DataGrid SelectionChanged事件取消单元格焦点问题




wpf表格 (2)

我正在执行数据网格选择更改事件内的检查。 如果我的条件满足,代码应该被执行,选择的项目应该被高亮显示(或获得焦点),如果条件不满足,控件应该返回并且先前选择的项目应该保持选择。

这里发生的情况是,如果不满足条件,选定的项目没有改变(这是工作正常),但焦点仍然转移到现在选择的单元格,所以单元格选择项目是前一个单元格,而焦点是发射事件的单元格。

我试过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; 
   } 
}

解决了我的问题。

需要做的是在textbox_PreviewKeyDown()事件中启用脏标志,然后在datagrid_PreviewMouseLeftButtonDown()事件中执行脏检查。

如果发现脏,则设置e.handled=true以便控制跳过此流程的代码执行。


防止循环。

void OnSelectionChanged(Object sender, SelectionChangedEventArgs e)
{
    // condition code
    if (conditionFailed)
    {
        datagrid.SelectionChanged -= OnSelectionChanged;
        datagrid.Selectedindex = e.Removeditem[0];
        datagrid.SelectionChanged += OnSelectionChanged;
    }
}




datagrid