WPF: ListBox绑定xml数据

原创 2017年04月25日 14:50:08

    继承自IEnumerable接口的各种集合都可以作为ListBox控件的数据源。WPF中的XmlDataProvider 提供了一种将xml文件作为集合数据源的便捷方式,只要所定义的xml格式正确没有拼写错误,XPath路径指定正确都可以绑定成功。 下面定义一个xml资源:

  • 定义资源并应用到ListBox

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="800" Height="500" 
  WindowStartupLocation="CenterScreen" Title="ListBox-绑定xml" SizeToContent="WidthAndHeight">
  <Window.Resources>
     <XmlDataProvider x:Key="MyXmlData" XPath="Root/Sub">
            <x:XData>
                <Root xmlns="" Name="Supermarket">
                    <Sub SubId="0" SubName="Sub0"/>
                    <Sub SubId="1" SubName="Sub1"/>
                    <Sub SubId="2" SubName="Sub2"/>
                    <Sub SubId="3" SubName="Sub3"/>
                    <Sub SubId="4" SubName="Sub4"/>
                    <Sub SubId="5" SubName="Sub5"/>
                </Root>
            </x:XData>
        </XmlDataProvider> 
  </Window.Resources>

注意这里的XPath只定义到二级的Sub,如果有多级向后追加即可。定义ListBox之前,首先介绍2个绑定属性:

  1. DisplayMemberPath  用来设置显示的对象属性路径。 
  2. SelectedValuePath    用来设置选择值的对象属性路径。 
上边2属性的绑定方式为 @加对应的节点属性名称,这里指的是SubName与SubId。 ListBox定义如下:
      <ListBox Name="lbxml"   Width="300" Height="300" SelectionMode="Single" 
      DisplayMemberPath="@SubName" SelectedValuePath="@SubId" 
      ItemsSource="{Binding Source={StaticResource MyXmlData}}">
      <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="Focusable" Value="True"/>
            <Setter Property="Template">
               <Setter.Value>
                  <ControlTemplate  TargetType="{x:Type ListBoxItem}">
                       <Border x:Name="border" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="transparent">
                         <ContentPresenter SnapsToDevicePixels="True"></ContentPresenter>
                       </Border>
                       <ControlTemplate.Triggers>
                         <Trigger Property="IsSelected" Value="True">
                           <Setter Property="Background" TargetName="border" Value="#958679"></Setter>
                         </Trigger>
                       </ControlTemplate.Triggers>
                  </ControlTemplate>
               </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
ContentPresenter 用来默认显示内容,也可使用其它内容控件Textblock代替。效果:
列表中显示的就是 DisplayMemberPath 定义的SubName。
  •      显示 选择的文本及值
ListBox的SelectedItem属性表示选择项对象,SelectedValue 属性表示选择项的值。 
<UniformGrid Columns="2" Margin="2">
<TextBlock Text="{Binding SelectedItem.Attributes[SubName].Value,ElementName=lbxml,StringFormat='显示的SubName:{0}'}"></TextBlock>
<TextBlock Text="{Binding SelectedValue,ElementName=lbxml,StringFormat='选择的SubId:{0}'}"></TextBlock>
</UniformGrid>
整体运行效果:


WPF学习笔记——ListBox用ItemsSource绑定数据源

protected class UserItem { public UserItem(int Id, string Name, bool IsActived) ...
  • leftfist
  • leftfist
  • 2014年05月10日 13:37
  • 28365

WPF绑定ListBox

class Student { public string sno { get; set; } public string sname { get; set; ...
  • wildfeng04
  • wildfeng04
  • 2012年02月25日 19:33
  • 2805

WPF学习笔记——ListBox用ItemsSource绑定数据源

转载于(http://blog.csdn.net/leftfist/article/details/25333425)作为一个WPF初学者,感到困难重重。在网上想查个ListBox绑定数据源的示例,结...
  • qq_37429590
  • qq_37429590
  • 2017年09月08日 15:18
  • 232

WPF中ListBox的创建和多种绑定用法

本篇博文为翻译(http://www.c-sharpcorner.com/uploadfile/mahesh/listbox-in-wpf/),本篇博文主要介绍ListBox控件的创建和用法。 先从...
  • lanshengsheng2012
  • lanshengsheng2012
  • 2013年08月28日 16:51
  • 15522

WPF中对XML的读写

XML(可扩展标记语言) 定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 写操作: XmlTextWri...
  • Samsone
  • Samsone
  • 2012年01月10日 14:36
  • 13600

WPF中XML的读写

初学WPF对于XML的用法有些不熟悉,在此纪录一下。 想要读取XML文件,首先在程序中引用XML相关类库,添加如下语句即可。using System.Xml; 1. XML文档创建 X...
  • fandongguang0702
  • fandongguang0702
  • 2017年01月14日 21:40
  • 1164

wpf操作xml文件

using System.Xml.Linq; public XElement Config = XElement.Load(@"config/set.xml"); //读取节点中全部数据 ...
  • ghevinn
  • ghevinn
  • 2015年08月27日 14:10
  • 821

WPF中对XML的读写。

对于XML一直是听过没用过,倒是因为现在的工作是用WPF写界面,所以实际上我接触XAML要比XML要早一些。不过我一开始就知道XAML是XML的一种,而且之前做单据模板设计器时生成xaml用的类也多是...
  • cdjcong
  • cdjcong
  • 2013年01月06日 16:16
  • 1746

在WPF中使用配置文件(ConfigurationManager)

App.config是一个标准的xml文件,xml文件的标记和属性是区分大小写的。开发人员可以使用配置文件来更改设置,而不必重新编译应用程序。配置文件的根节点是configuration。 我只用过a...
  • Lionel_Coder
  • Lionel_Coder
  • 2016年07月14日 22:21
  • 3391

WPF 读取xml

希望可以帮到各位.....
  • ht_zhaoliubin
  • ht_zhaoliubin
  • 2014年08月28日 16:50
  • 1813
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF: ListBox绑定xml数据
举报原因:
原因补充:

(最多只允许输入30个字)