Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在treeview控件中交换项目?_C#_Wpf_Treeview - Fatal编程技术网

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

C# 如何在treeview控件中交换项目?,c#,wpf,treeview,C#,Wpf,Treeview,我有一个treeview控件: 父项1 子项目1 子项目2 子项目3 父项2 子项目1 子项目2 子项目3 父项3 子项目1 子项目2 子项目3 例如,我希望将父项2与其子项一起上移或下移,以及将其父级的子项上移/下移 p、 我用数据库做过,但重新绑定treeview查看每个移动操作是性能问题。可能是与自定义对象的双向绑定?您可以按订单属性为treeview视图模型添加自定义分类器,例如 可能是与自定义对象的双向绑定?您可以按订单属性为treeview视图模型添加自定义分类器,例

我有一个treeview控件:

  • 父项1
    • 子项目1
    • 子项目2
    • 子项目3
  • 父项2
    • 子项目1
    • 子项目2
    • 子项目3
  • 父项3
    • 子项目1
    • 子项目2
    • 子项目3
例如,我希望将父项2与其子项一起上移或下移,以及将其父级的子项上移/下移


p、 我用数据库做过,但重新绑定treeview查看每个移动操作是性能问题。

可能是与自定义对象的双向绑定?您可以按订单属性为treeview视图模型添加自定义分类器,例如

可能是与自定义对象的双向绑定?您可以按订单属性为treeview视图模型添加自定义分类器,例如

那不行吗

TreeNode node1 = treeView.Nodes[1];
TreeNode node2 = treeView.Nodes[2];
treeView.Nodes[1] = node2;
treeView.Nodes[2] = node1;
那不行吗

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

我使用了过去发现的代码的修改版本,在
TreeView


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


基本上,它会找到保存集合的父控件,使用ItemContainerGenerator查找保存拖动项的容器,然后将容器移动到父控件中的新位置。下面的示例对我来说是可行的。选择子节点并与其父节点交换

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

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

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

我试过这个,但不起作用。p、 s.TreeView具有Items属性而不是节点。我已尝试过此操作,但不起作用。p、 s.TreeView具有Items属性而不是Nodes。链接不再有效,但说明很有用。@SuLlewellyn我添加了一个链接到文章的缓存副本,很高兴说明有所帮助!链接不再有效,但说明很有用。@SuLlewellyn我在文章的缓存副本中添加了一个链接,很高兴说明有所帮助!