我正在尝试跟踪工作流中选择的活动,并在删除之前进行一些检查。
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并选择我的项目一切顺利,正确填充selectedModelItems列表。
但是删除时刻到来并且在触发ModelChanged事件之前,这个SelectionChanged处理程序会起作用并重置我的所有选择,因为事实上现在已经删除了,它们不再被选中了。我正在寻找的是一种在选择更改之前访问该删除键的方法,这样就可以在清除之前将该列表保存到另一个缓冲区。
我的自定义活动的卸载事件发生在ModelChanged之后,因此不是一个选项。
更新:
我向前迈进了一步:
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
Console.WriteLine("test");
}
base.OnKeyDown(e);
}
但是这个处理程序没有按下我的删除键。其他一些键,如ctrl或字母,工作正常,事件触发。有什么想法吗?
答案 0 :(得分:1)
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);
}
就是这样,我可以在按下删除键时,在选择消失之前获取所选项目。