WPF DataGrid SelectionChanged事件取消单元焦点问题

本文关键字:单元 焦点 问题 取消 事件 DataGrid SelectionChanged WPF | 更新日期: 2023-09-27 18:15:13

我正在数据网格选择更改事件中执行检查。如果我的条件满足,代码应该被执行,选中的项目应该被突出显示(或获得焦点),如果条件不满足,控件应该返回和

这里发生的事情是,如果条件不满足,所选项目不会改变(这是按预期工作的),但焦点仍然被转移到现在选定的单元格,因此选定的单元格是前一个单元格,而焦点是触发事件的单元格。

我已经尝试过datagrid.dispatcher.invoke方法,但这似乎不工作。我还尝试设置datagrid. selecteindex =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; 
   } 
}

WPF DataGrid SelectionChanged事件取消单元焦点问题

防止循环。

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

解决了我的问题。

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

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