`

WPF学习之数据绑定

 
阅读更多
WPF中的数据绑定提供了很强大的功能。与普通的WinForm程序相比,其绑定功能为我们提供了很多便利,例如Binding对象的自动通知/刷新,Converter,Validation Rules,Two Way Binding等功能,省去了很多维护的繁琐工作。另外对于WPF中提供的数据模板功能,让我们可以轻松定制可以被复用的控制呈现的模块—但这是以数据绑定为前提来做到轻松易用的效果的。数据提供者例如XmlDataProvider和ObjectDataProvider更是简化了将对象以特定方式绑定并呈现的过程。可以说,数据绑定是WPF中让我们真正能够开始体现其便利性的特征之一,而对以数据驱动的应用来讲,其重要性不言而喻。

数据绑定的关键是System.Windows.Data.Binding对象,它会把两个对象(UI对象与UI对象之间,UI对象与.NET数据对象之间)按照指定的方式粘合在一起,并在他们之间建立一条通信通道,绑定一旦建立,接下来的应用生命周期中它可以自己独立完成所有的同步工作。根据其应用场合的不同我们将在本文中从以下几个部分分别讨论:

·         对象间的绑定

·         绑定到集合

·         数据模板

·         向绑定添加规则和转换器

1.     UI对象间的绑定
UI对象间的绑定,也是最基本的形式,通常是将源对象Source的某个属性值绑定 (拷贝) 到目标对象Destination的某个属性上。源属性可以是任意类型,但目标属性必须是依赖属性(Dependency Property)。通常情况下我们对于UI对象间的绑定源属性和目标属性都是依赖属性 (有些属性不是) ,因为依赖属性有垂直的内嵌变更通知机制,WPF可以保持目标属性和源属性的同步。

看个简单的例子是如何在XAML中实现数据绑定的:
<Window x:Class="WpfApplication1.数据绑定测试"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="数据绑定测试" Height="400" Width="400">
    <Grid>
        <StackPanel>
            <TextBox x:Name="txtName" Margin="5" Width="400"  Text="Source Element ce shi"></TextBox>
            <TextBlock x:Name="tbShowMessage" Margin="5" Width="400" Text="{Binding ElementName=txtName, Path=Text}" />           
            <Button Content="测试XAML绑定" Click="btnBasicBinding_Click"></Button>
        </StackPanel>
    </Grid>
</Window>

·         XAML绑定语法:
上边的代码我们将名为txtName的对象的Text属性作为源对象分别绑定给了两个TextBlock的Text属性。这里我们用了Binding关键字并指定了ElementName和Path,这两个就是指定源对象(Source)和源属性(Source Property). 通常我们在设定绑定时都用与StaticResource标记类似的语法{Binding… }并设置ElementName和Path属性:
Text=”{Binding ElementName=SourceObjectName, Path=SourceProperty}”
如:Text="{Binding ElementName=txtName, Path=Text}"

·         用Coding(C#)添加Binding
而对于C#里和绑定相关的代码,则看起来会罗嗦很多。但它们都同样的使用了Binding对象,然后指定PropertyPath的一个实例为源属性,然后可以有两个方法来加载绑定规则:

1.       调用FrameworkElement 或FrameworkContentElement对象的SetBinding方法
2.       调用BindingOperations.SetBinding静态方法
以下代码实现了和上边XAML文件类似的功能:

namespace WpfApplication1
{
    public partial class 数据绑定测试 : Window
    {
        public 数据绑定测试()
        {
            InitializeComponent();
        }

        private void btnBasicBinding_Click(object sender, RoutedEventArgs e)
        {
            this.txtName.Text = "this is a test";

            Binding binding = new Binding();
            //设置源对象
            binding.Source = txtName;
            //设置源属性
            binding.Path = new PropertyPath("Text");
            //添加到目标属性
            this.tbShowMessage.SetBinding(TextBlock.TextProperty,binding);
            //or
            //BindingOperations.SetBinding(tbShowMessage, TextBlock.TextProperty, binding);
        }
    }
}
·         用Coding(C#)移除Binding
当你在应用程序中某个地方添加了绑定,而在某个时候又不想这个绑定在接下来继续有效时,你可以有两种方式来断开这个绑定:

1.       用BindingOperations.ClearBinding静态方法。

例如BindingOperations.ClearBinding(currentTextBlock, TextBlock.TextProperty); BindingOperations同时还提供了ClearAllBindings方法,只需要传入要清除绑定的目标对象的名称,它就会将所有这个对象的绑定移除。
如上面的为:
BindingOperations.ClearBinding(tbShowMessage, TextBlock.TextProperty);


·         Binding对象的属性
Property   Description

Converter    转换器

ElementName  绑定的源对象

FallbackValue  绑定无法返回有效值时的默认显示。

Mode        绑定方式

Path        属性

RelativeSource   常用于自身绑定或者数据模板中来指定绑定的源对象。

Source   源对象

StringFormat   格式化表达式

UpdateSourceTrigger   Sets the events on which binding will occur.

ValidationRules  验证规则

2.       简单的将目标属性设置为一个新的值。

这个简单的方法同样有效,可以断开与前边设置的binding的连接。简单的设置为任何值即可:如:currentTextBlock.Text = “it’s a new value.”;

总结:对于对象间的绑定,绑定源为ElementName,Path为绑定源属性。ElementName必须为以下可选项之一:

DataContext
DataContext是WPF最后才试图查找的源。一旦RelativeSource和Source对象都没有被设置,则会在逻辑树种向上搜寻。

RelativeSource
用来标识和当前控件关联的对象,通常用于自我引用或数据模板。

Source
数据提供者/对象

2.     绑定到集合

·         利用ItemsSource来绑定数据源
常用标记:{Binding Path =””}    ItemSource    DisplayMemberPath 

通常来说这是我们在做以数据驱动为主的应用时最经常用到的绑定方式。WPF支持任何类型的.NET对象作为数据源绑定到WPF对象。对于所有的ItemsControl对象都有一个ItemsSource依赖属性,这是专门为数据绑定而准备的。ItemsSource的类型是IEnumerable,所以对于我们几乎所有的集合类型我们都可以轻易的改变成ItemsSource的源对象。通过以下语句我们可以将一个名为photos的集合赋予ListBox对象,并以显示Name属性的值:

<ListBox x:Name=”pictureBox” DisplayMemberPath=”Name” 
ItemsSource=”(Binding {DynamicResource photos}”


我们知道,依赖属性内建的垂直通知功能让UI对象间的绑定可以自己负责同步处理,但是对于.NET集合/对象来讲,它不具备这样的能力。为了让目标属性与源集合的更改保持同步,源集合必须实现一个叫INotifyCollectionChanged的接口,但通常我们只需要将集合类继承于ObservableCollection类即可。因为ObservableCollection实现了INotifyPropertyChanged和INotifyCollectionChanged接口。示例代码中我们这么去定义Photos集合类:

public class Photos : ObservableCollection<Photo>




分享到:
评论

相关推荐

    WPF学习数据绑定的例子

    这是一个WPF学习的小例子,是本人在学习的过程中总结的相关内容,若果想继续深入的学习,请查看本人博客的相关文章,博客地址:http://www.cnblogs.com/zzz-z123/

    WPF的数据绑定

    详细描述了在WPF中的数据绑定,值得参考学习。

    WPF后台动态绑定ListView数据源

    WPF的ListView简易操作示例,如何在代码中按需设置数据源、追加行或列。一个简单的示例说明,便于了解基本应用,供有需要的进行学习。

    简单的WPF TreeView绑定

    作为一个初学者学习WPF treeview数据绑定的简单例子。

    WPF数据绑定

    我个人在七月份断断续续学习WPF数据绑定的笔记,菜鸟一只,免费出来大家分享,大神勿喷啊

    WPF解析XML文档绑定到UI前台

    简单的WPF解析XML文档绑定到UI前台,适合初学者学习

    数据绑定学习代码

    WPF数据绑定学习 博文地址:http://blog.csdn.net/rabbitsoft_1987/article/details/19297073

    WPF学习编程资料全集

    WPF+Visuals+.pdf、WPF布局.ppt、Wpf入门白皮书.pdf、WPF数据绑定和展现高级应用(赖仪灵).pdf、WPF開發指南.doc、WPF控件核心机制深入解析.pdf、WPF知识总结.docx

    WPF知识学习笔记总结

    WPF学习笔记!总结了WPF中的几个重要的知识点进行总结,包括整体的结构,程序流程,数据绑定等等。

    WPF Binding

    WPF Binding,里面有源代码,值得初学者学习

    WPF MVVM DataGrid分页案例

    WPF MVVM DataGrid分页案例 运用数据绑定 Command 可作为MVVM学习使用

    WPF学习笔记 ——主流桌面应用开发技术

    WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括 可扩展应用程序标记语言 (XAML)、控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在 Microsoft .NET ...

    Mvvm+Wpf学习项目

    C#基于Wpf 的Mvvm项目,适合初学Wvvm模式的人 1、写viewModel的基类 NotificationObject: 2、数据属性和命令属性,实现 命令属性的基类: 3、3个数据属性和2个命令属性(add和save),实现viewModel 4、在xaml中,...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    示例描述:本章演示如何使用WPF数据绑定基础。 BindingToElementDemo 绑定到元素属性的示例。 BindingToObject 绑定到对象的示例。 DataBindingToTable 绑定到数据表示例。 第19章(\C19) 示例描述:本章...

    wpf视频学习3

    详细介绍wpf中的application和数据绑定的内容,有一些实例利于学习和开发

    葵花宝典WPF自学手册

    接下来的控件、样式、数据绑定、二维图形、动画等相关内容则能够为读者的WPF技术提升到一个比较高的层次,如同插上翅膀,自由翱翔。 这本书对于WPF核心技术的原理、概念、技术、技巧与开发实践的讲述,是基于一位...

    WPF动画、模板、样式、行为、多线程、数据绑定、MVVMLight用法、自定义控件示例(不断更新中)

    本资源是笔者学习过程中的笔记,目前包含了WPF中基本控件用法、数据绑定 、WPF动画效果、样式、模板定义、自定义控件、附加行为、多线程、串口模拟编写思路、导航页面、拖动效果、查看控件的默认模板,在集合中如果...

    WPF教程(让你成为高手)

    本WPF教程内容涉及元素的布局、控件模型、控件内容模型、焦点处理、依赖项属性、路由事件、WPF命令、WPF样式与模板、WPF资源、图形的使用、数据的绑定、三维、动画等。内容丰富,有难有易。代码经过我精心调试,都...

    WPF 基础知识开发教程汇总 PDF版.rar

    WPF经典基础知识汇总 PDF,想...(XAML)、控件、数据绑定、二维和三维图形、动画、模板、媒体、文本和版式。WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用程序。

    WPF 学习资料

    (1) WPF体系结构 (2) WPF应用程序管理 (3) WPF窗体 ... (16).WPF数据绑定 快速掌握 WPF 基础知识

Global site tag (gtag.js) - Google Analytics