gpt4 book ai didi

c# - WPF 如何将 XML 与多个命名空间绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 10:54:45 25 4
gpt4 key购买 nike

我有这个数据集,我正在使用网络服务。它看起来像是从 Microsoft ADO 生成的 XML。我想将此数据绑定(bind)到 C# 中的 WPF 数据网格,但我不太清楚如何对命名空间进行编码。

<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<rs:data>
<z:row ResumeID='7217937' FullName='Brianna Burgwell' AddressLine1='430 Bar Ranch Rd.' AddressLine2='' City='Buford' PostalCode='90210' State='CA' Country='US'/>
<z:row ResumeID='7218085' FullName='Mandy Philips' AddressLine1='200 Beltway Loop' AddressLine2='' City='Buford' PostalCode='90210' State='CA' Country='US'/>
</rs:data>
</xml>

如果我去除所有命名空间前缀并使其成为简单的 XML,则此 XAML 有效:

<Grid.Resources>
<XmlDataProvider x:Key="applicants" Source="sample.xml" />
</Grid.Resources>
<DataGrid x:Name="applicantGrid" DataContext="{StaticResource applicants}" ItemsSource="{Binding XPath=/data/row}" AutoGenerateColumns="False" Margin="12,12,31,12" SelectionChanged="applicantGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="ResumeID" Binding="{Binding XPath=@ResumeID}" />
<DataGridTextColumn Header="Name" Binding="{Binding XPath=@FullName}" />
</DataGrid.Columns>
</DataGrid>

但是对于命名空间,我无法弄清楚 XmlNamespaceMappingCollection 的正确配置。

最佳答案

您可以在 XmlNamespaceMappingCollection 中设置命名空间集合,并使用 XmlNamespaceManager 属性应用于您的 XmlDataProvider

<Grid.Resources>
<XmlNamespaceMappingCollection x:Key="myNamespaces">
<XmlNamespaceMapping Uri="http://www.somenamespace.com" Prefix="namespace1"/>
<XmlNamespaceMapping Uri="http://www.anothernamespace.com" Prefix="namespace2"/>
</XmlNamespaceMappingCollection>

<XmlDataProvider x:Key="applicants" XmlNamespaceManager="{StaticResource myNamespaces}" Source="sample.xml" />
</Grid.Resources>
<DataGrid x:Name="applicantGrid" DataContext="{StaticResource applicants}" ItemsSource="{Binding XPath=/data/row}" AutoGenerateColumns="False" Margin="12,12,31,12" SelectionChanged="applicantGrid_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="ResumeID" Binding="{Binding XPath=namespace1:ResumeID}" />
<DataGridTextColumn Header="Name" Binding="{Binding XPath=namespace2:FullName}" />
</DataGrid.Columns>
</DataGrid>

关于c# - WPF 如何将 XML 与多个命名空间绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19962971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com