从 WPF 应用程序中的代码访问 xml 数据
Access xml data from the code in WPF application
我有一个 xml 文件,其中包含 WPF 应用程序所需的多个分层数据。我的objective是先用ComboBox筛选数据,最后select把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 解析 .
编写单独的代码是可能的
您可以将 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;
我有一个 xml 文件,其中包含 WPF 应用程序所需的多个分层数据。我的objective是先用ComboBox筛选数据,最后select把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 解析 .
编写单独的代码是可能的您可以将 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;