1

への複数選択ロジックの作成に問題がありDevExpress TreeViewます。

treeItemおよび 3 つの派生クラス (ドライブ、ディレクトリ、ファイル) のインターフェイスがあります。

次のようなロジックを追加したい

  • 複数のファイルのみ選択可能
  • ユーザーが複数のドライブまたはディレクトリを選択したい場合、1 つ (最後の) 項目のみを選択する必要があります
  • fe 2 ファイルが選択され、ユーザー CTRL があり、ディレクトリまたはドライブをクリックすると、選択には最後の項目 (この場合はディレクトリまたはドライブ) のみが含まれる必要があります。

今、私はこのようなsthを持っています:

<dxg:GridControl
  SelectedItems = "{Binding Selection.SelectedItems, Mode=OneWay}"
  SelectionChanged="Grid_OnSelectionChanged"
  SelectedItemChanged="Grid_OnSelectedItemChanged">    
  <dxg:GridControl.View>
    <dxg:TreeListView MultiSelectMode = "Row"/>
  </dxg:GridControl.View>
</dxg:GridControl>

そしてコードビハインドで:

private void MachinesGrid_OnSelectionChanged(object sender, GridSelectionChangedEventArgs e)
{
  MyViewModel vm = (MyViewModel)DataContext;
  if (e.Action == CollectionChangeAction.Add)
  {
      if (item.Type == ItemType.Folder)
      {
         vm.Selection.ClearSelection();
         vm.Selection.AddToSelection(item);
      }
      else
      {
        vm.Selection.AddToSelection(item);
      }
   }
}

private void MachinesGrid_OnSelectedItemChanged(object sender, SelectedItemChangedEventArgs e)
{
   TreeItem item = e.NewItem as TreeItem;
   if (item == null)
   {
      return;
   }
   MyViewModel vm = (MyViewModel)DataContext;
   vm.Selection.ClearSelection();
   vm.Selection.AddToSelection(item);
}

問題は

vm.Selection.ClearSelection();

列挙時に変更しているためです。

誰でもこの問題を解決できますか?

4

1 に答える 1