I will make an example using the Catel MVVM pattern.
XAML:
<TreeView x:Name="PrjTreeViev" SelectedItem="{Binding SelectedItemTreeView}" ItemsSource="{Binding TreeViewSource, IsAsync=True}"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Path=Elems}"> <TextBlock Text="{Binding Name}" /> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView>
Now let's go to the ViewModel code
C #
/// <summary> /// Регистрируем TreeViewSourceProperty /// </summary> public static readonly PropertyData TreeViewSourceProperty = RegisterProperty("TreeViewSource", typeof(List<TreeElem>)); /// <summary> /// Установка, получение значений из TreeViewSource /// </summary> public List<TreeElem> TreeViewSource { get { return GetValue<List<TreeElem>>(TreeViewSourceProperty); } set { SetValue(TreeViewSourceProperty, value); } } /// <summary> /// Регистрируем SelectedItemTreeViewProperty /// </summary> public static readonly PropertyData SelectedItemTreeViewProperty = RegisterProperty("SelectedItemTreeView", typeof(TreeElem)); /// <summary> /// Установка, получение значений из SelectedItemTreeView /// </summary> public TreeElem SelectedItemTreeView { get { return GetValue<TreeElem>(SelectedItemTreeViewProperty); } set { SetValue(SelectedItemTreeViewProperty, value); } } public class TreeElem //класс с списком для отображения { public string Name { get; set; } public ObservableCollection<TreeElem> Elems { get; set; } }
We will also make a command for deletion, which will be unavailable if no item is selected.
public ICatelCommand DeletSelectedNode => new TaskCommand<TreeElem>(node => Task.Run(() => { if(MessageBox.Show($"Уверены что хотите удалить данный элмент {node.Name}?", "Подтвердите действие", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes) TreeViewSource.Remove(node); /// Удаляем, если пользователь согласился }), node => SelectedItemTreeView != null); /// Команда не будет доступна если не выбран элемент в TreeView
After all these operations we create a button, or a context menu, in which we create a binding on our team.
XAML:
<Button Command="{Binding DeletSeletedNode}" CommandParametr="{Binding ElementName=PrjTreeViev, Path=SelectedItem}", Content="Удалить элемент">