从 WPF 应用程序中的代码访问 xml 数据
Posted
技术标签:
【中文标题】从 WPF 应用程序中的代码访问 xml 数据【英文标题】:Access xml data from the code in WPF application 【发布时间】:2021-05-25 12:10:23 【问题描述】:我有一个 xml 文件,其中包含 WPF 应用程序所需的多个分层数据。我的目标是首先使用 ComboBox 过滤数据,最后将 AttributeUp 和 AttributeDown 标签内的数据选择到代码中。
<?xml version = "1.0" encoding="utf-8"?>
<MenuItems xmlns="">
<Menu Name="menu1">
<SubMenu Name = "submenu1">
<ItemsList>
<Item Name = "item1">
<AttributeUp>DataUp</AttributeUp>
<AttributeDown>DataDown</AttributeDown>
</Item>
</SubMenu>
</Menu>
</MenuItems>
下面是添加 XmlDataProvider 到静态资源的代码。
<Window.Resources>
<XmlDataProvider x:Key="updownItems" Source="./updownItemsList.xml" XPath="MenuItems/Menu" IsInitialLoadEnabled="True" IsAsynchronous="False"/>
</Window.Resources>
下面是我如何过滤数据
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label Content="Level1" Width="35" Margin="0,0,0,0"></Label>
<ComboBox x:Name="cmbBoxToplevel" IsEditable="True" SelectedIndex="0" Width="110"
Margin="0,0,0,0" HorizontalAlignment="Right"
ItemsSource="Binding Source=StaticResource updownItems"
DisplayMemberPath="@Name" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Level2" Margin="0,0,0,0"></Label>
<ComboBox x:Name="cmbBoxSecondLevel" IsEditable="True" Width="110" SelectedIndex="0"
Margin="0,0,0,0" HorizontalAlignment="Right"
DataContext="Binding Path=SelectedItem, ElementName=cmbBoxToplevel"
ItemsSource="Binding XPath=./Menu" DisplayMemberPath="@Name" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Level3" Margin="0,10,0,0"></Label>
<ComboBox x:Name="cmbBoxJanya" IsEditable="True" Width="110" SelectedIndex="0"
Margin="0,10,0,0" HorizontalAlignment="Right" DataContext="Binding Path=SelectedItem,
ElementName=cmbBoxSecondLevel" ItemsSource="Binding XPath=./ItemsList/Item"
DisplayMemberPath="@Name" />
</StackPanel>
</StackPanel>
有了这些,我可以将 xml 标记名称过滤到不同的组合框中。我需要实现的是将AttributeUp和AttributeDown的内容直接访问到后面的C#代码(MainWindow)中。我不想使用任何 WPF 元素来存储这些参数。 无需编写单独的 xml 解析代码即可。
【问题讨论】:
你想要parse the XML document吗? 我想避免 XML 解析。如您所见,如果我包含一个 TextBlock,我可以将 xml 数据绑定到它并从后面的代码中访问它。我想通过将绑定分配给属性来实现类似的事情。有没有可能。 【参考方案1】:您可以将AttributeUp
和AttributeDown
绑定到TextBlocks
<TextBlock x:Name="UpTxt" DataContext="Binding ElementName=cmbBoxJanya, Path=SelectedItem"
Text="Binding XPath=./AttributeUp"/>
<TextBlock x:Name="DownTxt" DataContext="Binding ElementName=cmbBoxJanya, Path=SelectedItem"
Text="Binding XPath=./AttributeDown"/>
并在后面的代码中访问值
var upValue = UpTxt.Text;
var downValue = DownTxt.Text;
【讨论】:
谢谢,我担心 TextBlock 会被显示。我使用了 Visibility="Hidden" 属性。我将此标记为答案,并建议将可见性设置为隐藏。以上是关于从 WPF 应用程序中的代码访问 xml 数据的主要内容,如果未能解决你的问题,请参考以下文章