加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:21:48 所属栏目:百科 来源:网络整理
导读:我在datagrid选择更改事件中执行检查. 如果我的条件满足,则应该执行代码并且应该突出显示所选项(或获得焦点),如果条件不满足,则控件应该返回并且 之前选择的项目应保持选中状态. 这里发生的是如果条件不满足所选项目没有改变(这是按照需要工作)但焦点仍然转
我在datagrid选择更改事件中执行检查.
如果我的条件满足,则应该执行代码并且应该突出显示所选项(或获得焦点),如果条件不满足,则控件应该返回并且
之前选择的项目应保持选中状态.

这里发生的是如果条件不满足所选项目没有改变(这是按照需要工作)但焦点仍然转移到现在选择的单元格,因此单元格选择项目是前一个单元格而焦点对象是解雇事件的单元格.

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

解决方法

防止循环.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读