【问题标题】:Access xml data from the code in WPF application从 WPF 应用程序中的代码访问 xml 数据
【发布时间】: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 标记名称过滤到不同的组合框中。我需要实现的是将AttributeUpAttributeDown的内容直接访问到后面的C​​#代码(MainWindow)中。我不想使用任何 WPF 元素来存储这些参数。 无需编写单独的 xml 解析代码即可

【问题讨论】:

  • 你想要parse the XML document吗?
  • 我想避免 XML 解析。如您所见,如果我包含一个 TextBlock,我可以将 xml 数据绑定到它并从后面的代码中访问它。我想通过将绑定分配给属性来实现类似的事情。有没有可能。

标签: c# xml wpf data-binding


【解决方案1】:

您可以将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;

【讨论】:

  • 谢谢,我担心 TextBlock 会被显示。我使用了 Visibility="Hidden" 属性。我将此标记为答案,并建议将可见性设置为隐藏。
猜你喜欢
  • 2014-03-08
  • 2016-06-02
  • 2011-07-12
  • 1970-01-01
  • 2017-03-26
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
相关资源
最近更新 更多