如何在c#中更改xmldataprovider itemssource?

时间:2014-03-10 23:05:17

标签: c# xml wpf

我已使用XAML文件中的XmlDataProvider将XML文件绑定到我的ListBox。是否可以以编程方式添加或删除项目而无需转换为IObservableCollection,清除itemssource,进行更改然后将itemssource设置回集合?

1 个答案:

答案 0 :(得分:1)

Document

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

注意:如果您在未来的问题中提供更多上下文(您已经拥有的相关代码)会更好,这样人们就可以专注于回答实际问题,并且可以跳过重新创建上下文的过程。