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绑定XML数据源

WPF在绑定XML时会有一些麻烦,经常是不显示列表内容,但是内容项却是存在,这说明配置XAML信息有误,见图例效果,绑定XML数据源,且能实现分组。1.XML数据源,其中xmlns是命名空间,后面代码...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

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

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

WPF ListBox等控件绑定集合

public class Student     {         private string name;         public string Name         {      ...

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

本篇博文为翻译(http://www.c-sharpcorner.com/uploadfile/mahesh/listbox-in-wpf/),本篇博文主要介绍ListBox控件的创建和用法。 先从...

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

本篇博文为翻译(http://www.c-sharpcorner.com/uploadfile/mahesh/listbox-in-wpf/),本篇博文主要介绍ListBox控件的创建和用法。 先从...

WPF中关于ListBox绑定数据的问题

在定义ListBox的ItemSource绑定时,出现了初次绑定有数据,但是数据变化时视图没有更新的情况。...

读取XML的节点属性并绑定到ListBox

http://topic.csdn.net/u/20090718/14/77b76f31-b24b-48af-b9b1-5a88b65f2a1f.html?seed=2113482969&r=5846...
  • gdjlc
  • gdjlc
  • 2009年11月10日 11:15
  • 999

WPF —ListView用ItemsSource绑定对象列表

虽然wpf 开发有段时间了,但是对于绑定数据这块儿,理解的还是不太深入 。 参考了 http://blog.csdn.net/leftfist/article/details/25333425 的列子...

WPF ListBox数据绑定

使用数据库AllData ,我们的程序会从S_Province表中读取数据,并绑定! 表结构如图所示: 程序将读取城市名称,创建时间,修改时间,列在一个WPF ListBox控件...
  • lemonay
  • lemonay
  • 2013年03月20日 13:03
  • 1317
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WPF: ListBox绑定xml数据
举报原因:
原因补充:

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