Articles in this section
Category / Section

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

2 mins read

This article will explain us 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.

Model:

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

 

ViewModel:

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

MainWindow.xaml

 
<Grid>        
  <syncfusion:TreeViewAdv Margin="10" x:Name="tree" AllowDragDrop="True" ItemsSource="{Binding TreeItems}">
  <syncfusion:TreeViewAdv.ItemTemplate>
      <HierarchicalDataTemplate>
         <TextBlock Text="{Binding Header}" />
      </HierarchicalDataTemplate>
   </syncfusion:TreeViewAdv.ItemTemplate>
 </syncfusion:TreeViewAdv>       
</Grid>
 

 

MainWindow.xaml.cs

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

 

 

View sample in GitHub

Did you find this information helpful?
Yes
No
Help us improve this page
Please provide feedback or comments
Comments (0)
Please  to leave a comment
Access denied
Access denied