C# 如何在treeview控件中交换项目?
我有一个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视图模型添加自定义分类器,例
- 父项1
- 子项目1
- 子项目2
- 子项目3
- 父项2
- 子项目1
- 子项目2
- 子项目3
- 父项3
- 子项目1
- 子项目2
- 子项目3
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我在文章的缓存副本中添加了一个链接,很高兴说明有所帮助!