我已使用XAML文件中的XmlDataProvider将XML文件绑定到我的ListBox。是否可以以编程方式添加或删除项目而无需转换为IObservableCollection,清除itemssource,进行更改然后将itemssource设置回集合?
答案 0 :(得分:1)
XmlDataProvider属性是标准XmlDocument对象。因此,您可以像使用XmlDocument
抽象的XML文件一样添加,删除或修改项目。您可以在网上找到许多资源,说明如何处理XmlDocument
。所以,这只是从CodeProject article改编的简单示例:
XAML:
<ListBox x:Name="TeamsListBox" Margin="0,0,0,20" DockPanel.Dock="Left"
ItemsSource="{Binding}"
IsSynchronizedWithCurrentItem="True"
Visibility="Visible" SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding XPath=Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.DataContext>
<XmlDataProvider x:Name="TeamData" Source="Teams.xml" XPath="Teams/Team" />
</ListBox.DataContext>
</ListBox>
XML:
<Teams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Team>
<Id>1</Id>
<Name>Arizona Cardinals</Name>
<Conference>NFC West</Conference>
</Team>
<Team>
<Id>2</Id>
<Name>Atlanta Falcons</Name>
<Conference>NFC South</Conference>
</Team>
</Teams>
以编程方式删除第一个团队的示例代码:
var xmlData = (XmlDataProvider) TeamsListBox.DataContext;
var node = xmlData.Document.DocumentElement["Team"].SelectSingleNode("//Team[./Id='1']");
node.ParentNode.RemoveChild(node);
注意:如果您在未来的问题中提供更多上下文(您已经拥有的相关代码)会更好,这样人们就可以专注于回答实际问题,并且可以跳过重新创建上下文的过程。