从 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 标签名称过滤到不同的组合框中。我需要实现的是将 AttributeUpAttributeDown 的内容直接访问到后面的 C# 代码 (MainWindow) 中。我不想使用任何 WPF 元素来存储这些参数。 无需为 xml 解析 .

编写单独的代码是可能的

您可以将 AttributeUpAttributeDown 绑定到 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;