我试图跟踪在工作流中选择了哪些活动,并在删除它们之前进行一些检查。
wd.Context.Items.Subscribe<Selection>(SelectionChanged);
List<ModelItem> selectedModelItems = new List<ModelItem>();
private void SelectionChanged(Selection selection)
{
selectedModelItems.Clear();
foreach (ModelItem mi in selection.SelectedObjects)
{
selectedModelItems.Add(mi);
}
}
在按CTRL并选择my items时,selectedModelItems列表是正确填充的。
但是删除时刻到了,在触发ModelChanged事件之前,这个SelectionChanged处理程序开始工作,并重置我的所有选择,因为实际上,现在删除了,它们不再被选中了。我要寻找的是一种在选择更改之前访问该删除键的方法,并在清除该列表之前将该列表保存到另一个缓冲区。
我的自定义活动的卸载事件在ModelChanged之后,所以这不是一个选项。
更新:
我迈出了新的一步:
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
Console.WriteLine("test");
}
base.OnKeyDown(e);
}
但是这个处理程序没有捕获我按下的删除键。其他一些键,如ctrl,或信函,工作正常,事件触发。对此有什么想法吗?
发布于 2014-10-14 07:27:09
好的,找到了: OnPreviewKeyDown事件。
List<ModelItem> selectedModelItems = new List<ModelItem>();
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
IEnumerable<ModelItem> activities = wd.Context.Items.GetValue<Selection>().SelectedObjects;
foreach (ModelItem mi in activities)
{
selectedModelItems.Add(mi);
}
}
base.OnPreviewKeyDown(e);
}
就是这样,我能够得到选定的项目,当按下删除键,在选择消失之前。
https://stackoverflow.com/questions/26355122
复制相似问题