深入浅出WPF之Binding--笔记(2015.03.03)

将上篇的this.listBoxStudents.DisplayMemberPath = "Name";注释。然后XAML代码改为:

<StackPanel x:Name="stackPanel" Background="LightBlue">
        <TextBlock Text="Student ID:" FontWeight="Bold" Margin="5"/>
        <TextBox x:Name="textBoxId" Margin="5"/>
        <TextBlock Text="Student List:" FontWeight="Bold" Margin="5"/>
        <ListBox x:Name="listBoxStudents" Height="110" Margin="5">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Id}" Width="30"/>
                        <TextBlock Text="{Binding Name}" Width="60"/>
                        <TextBlock Text="{Binding Age}" Width="30"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>

在集合类型作为列表控件的ItemSource时,一般会考虑使用ObservableCollection<T>代替List<T>,因为ObservableCollection<T>类实现了INotifyCollectionChanged和INotifyPropertyChanged接口,能把集合的变化立刻通知显示它的列表控件,改变会立即显现出来。

当使用XML数据作为Binding的Source时,使用XPath而不是Path属性来指定数据的来源。

XML:

<?xml version="1.0" encoding="utf-8"?>
<StudentList>
 <Student Id = "1">
  <Name>Tim</Name>
 </Student>
 <Student Id = "2">
  <Name>Tom</Name>
 </Student>
 <Student Id = "3">
  <Name>Vena</Name>
 </Student>
 <Student Id = "4">
  <Name>Emily</Name>
 </Student>
</StudentList>

XAML:

<StackPanel Background="LightBlue">
        <ListView x:Name="listViewStudent" Height="130" Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Id" Width="80" DisplayMemberBinding="{Binding [email protected]}"/>
                    <GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding XPath=Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Load" Click="Button_Click" Height="25" Margin="5"/>
    </StackPanel>

C#代码:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

private void Button_Click(object sender, RoutedEventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("RawData.xml");

XmlDataProvider xdp = new XmlDataProvider();
            xdp.Document = doc;
            xdp.XPath = @"/StudentList/Student";
            this.listViewStudent.DataContext = xdp;
            this.listViewStudent.SetBinding(ListView.ItemsSourceProperty, new Binding());
        }
    }

时间: 2024-10-13 22:27:49

深入浅出WPF之Binding--笔记(2015.03.03)的相关文章

深入浅出WPF之Binding -- 笔记(2015.03.01)

当使用一个集合或DataView作为Binding的源时,如果想把它的默认元素当作Path使用,则需要使用"/"语法:如果集合元素的属性仍然还是一个集合,又想把子级集合中的元素当作Path,则可以使用多级斜线的语法(即一路"斜线"下去): 事例一: XAML: <StackPanel>        <TextBox x:Name="textBox1" BorderBrush="Black" Margin=&

《深入浅出WPF》 学习笔记

<深入浅出WPF> 序言 1. 什么是WPF    2. 为什么要学习WPF 第一章 XAML概览 1. XAML是什么? 2. XAML有哪些优点 第二章 从零起步认识XAML 1. 新建WPF项目 2. 剖析最简单的XAML代码 第三章 系统学习XAML语法 1. XAML文档的树形结构 2. XAML中为对象属性赋值的语法 2.1 使用标签的Attribute为对象属性赋值 2.2 使用TypeConverter 2.3 属性元素 2.4 标记扩展(Markup Extensions)

深入浅出WPF之Binding--笔记(2015.03.02)

Binding DataContext属性被定义在FrameworkElement类里,这个类是WPF的基类,这意味着所有WPF控件都具备这个属性.在UI树上,每个结点都有DataContext.当一个Binding只知道Path而不知道Source时,会沿着UI树一路向树的根部找过去,每路过一个结点就查看该结点的DataContext是否具有Path所指定的属性.若有,那就把该对象作为自己的Source,否则继续找下去.如果到了树的根部还没有找到,那该Binding就没有Source,因而不会

深入浅出WPF之Binding--笔记(2015.03.04)

XML语言可以方便地表示树形数据结构.HierarchicalDataTemplate类表示一个 DataTemplate,它支持 HeaderedItemsControl,比如 TreeViewItem 或 MenuItem. XAML: <Window.Resources>        <XmlDataProvider x:Key="xdp" XPath="FileSystem/Folder">            <x:XDa

深入浅出WPF之MultiBinding--笔记(2015.03.10)

当UI需要显示的信息由不止一个数据来源决定,此时需要使用MultiBinding,即多路Binding.MultiBinding与Binding都以BindingBase为基类,也就是说,凡是能使用Binding对象的场合都能使用MultiBinding.MultiBinding具有一个名为Bindings的属性,其类型是Collection<BindingBase>,通过这个属性MultiBinding把一组Binding对象聚合起来,处在该集合中的Binding对象都可以拥有自己的数据校验

深入浅出WPF之Binding--笔记(2015.03.08)

C#代码: RelativeSource rs = new RelativeSource();    rs.AncestorLevel = 2;    rs.AncestorType = typeof(DockPanel);    Binding binding = new Binding("Name") { RelativeSource = rs };    this.textBox1.SetBinding(TextBox.TextProperty, binding); 或在XAML

深入浅出WPF之Binding--笔记(2015.03.06)

ObjectDataProvider就是把对象作为数据源提供给Binding.同XmlDataProvider的父类都是DataSourceProvider抽象类. 事例一: XAML: <Grid Background="LightBlue">        <Button Click="Button_Click"/>    </Grid> C#代码: private void Button_Click(object sende

《深入浅出WPF》学习笔记之深入浅出话Binding

Binding作为数据的桥梁,它的两端分别是Binding的源(Source)和目标(Target),用来把Source中的数据送到Target中,并把在Target中的改变返回到Source.一般情况,Binding的源是逻辑层的对象,目标是UI层的控件对象. Binding的基本使用方法 如果想让作为数据源的对象在发生更改时自动显示到界面上,数据源的对象需要实现INotifyPropertyChanged接口.设置绑定时需要指定绑定到数据源的哪个属性,这个属性称为Binding的路径Path

《深入浅出WPF》学习笔记之系统学习XAML语法

XAML是WPF技术中专门用于设计UI的语言,设计师直接使用XAML设计界面,设计完成后输出XAML代码交给程序员直接使用. XAML是一种由XML派生而来的语言,所以会继承XML中的一些概念. 命名空间: 命名空间为避免标签的名称冲突而出现,可以把来自不同程序集中的类映射到自定义的命名空间前缀,使用语法xmlns[:可选的映射前缀]="名称空间和程序集".没有映射前缀的命名空间为默认命名空间,默认命名空间只能有一个.命名空间映射一般写在根标签上. 标签与运行时对象的关系: 在XAML