Skip to content

SyncfusionExamples/How-to-restrict-drag-and-drop-of-nodes-in-wpf-treeviewadv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 

Repository files navigation

How to restrict drag and drop of parent node into another parent node in WPF TreeViewAdv?

This article will explain how to restrict drag and drop of a parent node into another parent node, where it will allow only reordering the child nodes in WPF TreeViewAdv. This can be achieved by using DragStart and DragEnd event.

public class Model
{
    public Model()
    {
        SubItems = new ObservableCollection<Model>();
    }

    public string Header { get; set; }
    public ObservableCollection<Model> SubItems { get; set; }
}
public class ViewModel
{
    public ViewModel()
    {
        TreeItems = new ObservableCollection<Model>();
        PopulateData();
    }

    public ObservableCollection<Model> TreeItems { get; set; }

    private void PopulateData()
    {
        Model root1 = new Model() { Header = "Root1" };
        PopulateSubItems(root1);
        TreeItems.Add(root1);

        Model root2 = new Model() { Header = "Root2" };
        PopulateSubItems(root2);
        TreeItems.Add(root2);

        Model root3 = new Model() { Header = "Root3" };
        PopulateSubItems(root3);
        TreeItems.Add(root3);
    }

    private void PopulateSubItems(Model root)
    {
        Model subItem1 = new Model() { Header = "Item1" };
        Model subItem2 = new Model() { Header = "Item2" };
        Model subItem3 = new Model() { Header = "Item3" };
        Model subItem4 = new Model() { Header = "Item4" };

        root.SubItems.Add(subItem1);
        root.SubItems.Add(subItem2);
        root.SubItems.Add(subItem3);
        root.SubItems.Add(subItem4);
    }
}
<Grid>
    <syncfusion:TreeViewAdv Margin="10"
                            x:Name="tree"
                            AllowDragDrop="True"
                            ItemsSource="{Binding TreeItems}">
        <syncfusion:TreeViewAdv.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding SubItems}">
                <TextBlock Text="{Binding Header}" />
            </HierarchicalDataTemplate>
        </syncfusion:TreeViewAdv.ItemTemplate>
    </syncfusion:TreeViewAdv>
</Grid>
public partial class MainWindow : Window
{
    TreeViewItemAdv drag = null;

    public MainWindow()
    {
        InitializeComponent();
    }

    public void DragStart(object sender, DragTreeViewItemAdvEventArgs e)
    {
        drag = (sender as TreeViewAdv).SelectedContainer;
    }

    public void DragEnd(object sender, DragTreeViewItemAdvEventArgs e)
    {
        e.Cancel = false;
        TreeViewItemAdv drop = e.TargetDropItem as TreeViewItemAdv;

        if (drag != null && drop != null && drag.ParentItemsControl == drop.ParentItemsControl)
        {
            e.Cancel = true;
        }
    }
}

About

This session explains how to restrict drag and drop of nodes in WPF TreeViewAdv.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 8

Languages