如何在treeview控件中交换项目?

时间:2011-09-23 12:33:03

标签: c# wpf treeview

我有一个树视图控件:

  • 父项目1
    • 儿童项目1
    • 儿童项目2
    • 儿童项目3
  • 父项目2
    • 儿童项目1
    • 儿童项目2
    • 儿童项目3
  • 父项目3
    • 儿童项目1
    • 儿童项目2
    • 儿童项目3

我想移动,例如 父项目2 ,向上或向下移动其子项以及我想为其父项向上/向下移动子项水平。

P.S。我已经使用数据库完成了这项工作,但是每次移动操作都会重新绑定树视图的性能问题。

4 个答案:

答案 0 :(得分:1)

我过去使用了 here here代码的修改版本来拖放TreeView

中的UI项目

基本上它找到了保存集合的父控件,使用ItemContainerGenerator查找包含拖动项的容器,然后将容器移动到父控件中的新位置

答案 1 :(得分:0)

也许是与自定义对象的双向绑定?您可以按顺序属性为树视图查看模型添加自定义排序器,例如...

答案 2 :(得分:0)

不能那样吗?

TreeNode node1 = treeView.Nodes[1];
TreeNode node2 = treeView.Nodes[2];
treeView.Nodes[1] = node2;
treeView.Nodes[2] = node1;

答案 3 :(得分:0)

以下示例对我来说是可行的。选择一个子节点并与其父节点交换。

TreeNode currentNode, targetNode;
currentNode = TreeView1.SelectedNode;
targetNode = currentNode.Parent;
if (currentNode.Parent != null)
{
    CopyedTreeNode = (TreeNode)targetNode.Clone();
    CopyedTreeNode02 = (TreeNode)currentNode.Clone();

    targetNode.Text = CopyedTreeNode02.Text;
    targetNode.Tag = CopyedTreeNode02.Tag;
    targetNode.ImageIndex = CopyedTreeNode02.ImageIndex;
    targetNode.SelectedImageIndex = CopyedTreeNode02.SelectedImageIndex;

    currentNode.Text = CopyedTreeNode.Text;
    currentNode.Tag = CopyedTreeNode.Tag;
    currentNode.ImageIndex = CopyedTreeNode.ImageIndex;
    currentNode.SelectedImageIndex = CopyedTreeNode.SelectedImageIndex;

    CopyedTreeNode.Remove();
    CopyedTreeNode02.Remove();
}