Devexpress TreeView中的多选逻辑

时间:2013-08-05 14:37:42

标签: c# wpf treeview devexpress

我在为DevExpress TreeView创建多选逻辑时遇到问题。

我有treeItem的接口和3个派生类(f.e.Drive,Directory,File)

我想添加类似

的逻辑
  • 只能选择多个文件
  • 用户是否要选择多个驱动器或目录,只应选择一个(最后)项目
  • 如果选择了f.e. 2个文件和用户CTRL并单击目录或驱动器,选择应仅包含最后一项(在本例中为目录或驱动器)

现在我有这样的想法:

<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();

因为我在枚举时正在改变它。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以查看DevExpress help lib。它就像微软那样称为MSDN。

有一个SelectedRowsCollection属性可以绑定到您的VM而不是简单get来自绑定属性