代码之家  ›  专栏  ›  技术社区  ›  Raghu

从WPF应用程序中的代码访问xml数据

  •  -1
  • Raghu  · 技术社区  · 4 年前

    我有一个包含WPF应用程序所需的多层次数据的xml文件。我的目标是首先使用组合框过滤数据,最后在代码中选择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>
    

    <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标记名过滤到不同的组合框中。我需要实现的是访问 属性 直接进入C#代码隐藏(主窗口)。我不想使用任何WPF元素来存储这些参数。 不需要为xml解析编写单独的代码就可以了 .

    0 回复  |  直到 4 年前
        1
  •  1
  •   user2250152    4 年前

    你可以绑定 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;