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;
}
}
}
Didn't find an answer?
Contact Support