斜面# 39;删除绑定到XML的TreeView中的SelectedItem

本文关键字:XML TreeView 中的 SelectedItem 绑定 删除 斜面 | 更新日期: 2023-09-27 18:13:51

我通过XmlDataProvider将我的TreeView ItemsSource绑定到XmlDocument。

xaml:

 <Window.Resources>
    <XmlDataProvider x:Key="XmlData" XPath="/root" />
    <HierarchicalDataTemplate>
        ...
    </HierarchicalDataTemplate>
    ...
 </Window.Resources>
 <GroupBox Header="XMLTree" DataContext="{StaticResource XmlData}">
        <TreeView Name="TemplateTree"
              ItemsSource="{Binding}"
              VirtualizingStackPanel.IsVirtualizing="False"
              VirtualizingStackPanel.VirtualizationMode="Standard" KeyDown="TemplateTree_KeyDown" />
 </GroupBox>

背后的代码:

    private void LoadTemplateButton_Click(object sender, RoutedEventArgs e)
    {
            var ofd = new OpenFileDialog();
            ofd.Filter = "XML" + " (*.xml)|*.xml";
            if (ofd.ShowDialog() != true) return;
            Document = new XmlDocument();
            Document.Load(ofd.FileName);
            Provider = (XmlDataProvider) FindResource("XmlData");
            Provider.Document = Document;
            Provider.Source = new Uri(ofd.FileName);
            Provider.Refresh();
    }

当我在树中编辑一些信息或添加新节点时,我可以轻松保存数据并刷新树。但是当我试图用这个函数

删除分支时
    private void TemplateTree_KeyDown(object sender, KeyEventArgs e)
    {
        try
        {
            if (e.Key == Key.Delete)
            {
                TemplateTree.Items.Remove(TemplateTree.SelectedItem);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
我得到一个错误:Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead.

那么,如何使它正确地从树和XmlDocument中删除项目?

斜面# 39;删除绑定到XML的TreeView中的SelectedItem

哦,不知道TreeViewItems集合包含绑定类型的对象。得到这些物体作为XmlElement使去除相当容易操作。刚从Provider.Document中删除了SelectedItem