我正在执行数据网格选择更改事件内部的检查。 如果我的条件满足,代码应该被执行,选定的项目应该被高亮显示(或获得焦点),如果条件不满足,控件应该返回并且之前选择的项目应该保持被选中。WPF DataGrid SelectionChanged事件取消单元格焦点问题
这里发生的情况是,如果不满足条件,选定的项目不会改变(它按照需要工作),但焦点仍然转移到现在选择的单元格,所以单元格选择的项目是前一个单元格,而焦点是发射事件的单元格。
我试过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;
}
}
你基于这种情况的条件是什么?你如何取消选择?有可能你可以通过在DataGridRow或DataGridCell上设置“IsReadOnly”的DataTrigger来代替 – Rachel
该标志在其他函数中获取它的值以及该标志是否设置,我们希望datagrid单元改变,我限制了细胞的变化,但不能限制焦点,在任何情况下都会转移到点击的新细胞。取消注册selectchanged事件不起作用 –
在选择更改的事件中使用的DataGrid.Dispatcher.BeginInvoke()前面的单元格根据需要突出显示,但单击的单元格可编辑 –