1

워크 플로우에서 선택된 활동을 추적하고 삭제하기 전에 몇 가지 확인을 시도하고 있습니다.WF4 Rehosted - ModelChanged가 트리거되기 전에 삭제 키가 누름

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 처리기가 실제로 선택되고 삭제되기 때문에 더 이상 선택되지 않기 때문에이 SelectionChanged 처리기가 작동하고 모든 선택 항목을 다시 설정합니다. 내가 찾고있는 방법은 선택 변경 전에 눌려진 해당 삭제 키에 대한 액세스 권한을 얻는 것이고이 방법은 삭제되기 전에 해당 목록을 다른 버퍼에 저장합니다.

사용자 지정 활동의 언로드 된 이벤트는 ModelChanged 이후에 발생하므로 옵션이 아닙니다.

UPDATE :

내가 새로운 단계 전진했다 :

protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (e.Key == Key.Delete) 
     { 
      Console.WriteLine("test"); 
     } 
     base.OnKeyDown(e); 
    } 

하지만이 핸들러 내 삭제 키를 누를 캐치하지 않습니다. ctrl 또는 문자와 같은 다른 키가 제대로 작동하고 이벤트가 발생합니다. 이것에 대한 어떤 생각?

+1

업데이트 2를 제거하고 아래 답변으로 추가하십시오. 그런 식으로 올바른 것으로 선택하고이 질문을 닫을 수 있습니다 (이 방법은 여기에서이 위치를 처리하는 방법입니다) – Will

+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); 
    } 

그게 전부입니다. 선택한 항목을 가져올 수 있습니다. 삭제 키를 누르면 선택 항목이 사라집니다.

관련 문제