WF4 Rehosted - 在触发ModelChanged之前按下删除键

时间:2014-10-14 07:33:19

标签: c# workflow-foundation-4 workflow-foundation workflow-activity

我正在尝试跟踪工作流中选择的活动,并在删除之前进行一些检查。

  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或字母,工作正常,事件触发。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,找到了东西: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);
    }

就是这样,我可以在按下删除键时,在选择消失之前获取所选项目。