我在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;
}
}
答案 0 :(得分:2)
防止循环。
void OnSelectionChanged(Object sender, SelectionChangedEventArgs e)
{
// condition code
if (conditionFailed)
{
datagrid.SelectionChanged -= OnSelectionChanged;
datagrid.Selectedindex = e.Removeditem[0];
datagrid.SelectionChanged += OnSelectionChanged;
}
}
答案 1 :(得分:0)
解决了我的问题。
需要做的是在textbox_PreviewKeyDown()
事件中启用脏标志
然后在datagrid_PreviewMouseLeftButtonDown()
事件中执行脏检查。
如果发现设置为脏,则设置e.handled=true
,以便控制跳过此流程的代码执行。