WPF-7: Binding -2

来自《深入浅出WPF》(刘铁猛)读书笔记

D)没有Path的Binding

表象:代码中看到path是一个“.”或者干脆没有Path的Binding;

Binding源本身就是数据且不需要Path来指明,典型的,string,int等基本类型就是这样,他们实例的本身就是数据,我们无法指出通过它的哪个属性来访问这个数据,这时我们只需将Path值设置为“.”就可以了。

在XAML代码里这个"."可以省略,但在C#代码里却不能省略。

E)为Binding指定源(Source)的几种方法

(1)把普通的CLR类型单个对象指定为Source;

(2)把普通CLR集合类型对象指定为Source;

(3)把ADO.Net数据对象指定为Source;

(4)使用XmlDataProvider把XML数据指定为Source;

(5)把依赖对象(Dependency Object)指定为Source;

(6)容器的DataContext;

(7)通过ElementName指定;在C#里面可以直接把对象作为Source赋值给Binding,但XAML无法访问对象,所以只能使用对象的Name属性来找到对象;

(8)通过Binding的RelativeSource属性相对的指定;

(9)把ObjectDataProvider对象指定为Source;

(10)把使用LINQ检索得到的数据对象作为Binding源;

F)没有Source的Binding--使用DataContext作为Binding的源

DataContext属性被定义在FrameWorkElement类里,这个类是WPF的基类,这意味着WPF控件都具有这个属性。

WPF的UI布局是树形结构,这棵树的每个节点都是控件,也就是说,UI元素树的每个节点都有DataContext。

依赖属性:当你没有为控件的某个依赖属性显示赋值时,控件会把自己容器的属性值‘借过来’当做自己的属性值。实际上是属性值沿着UI元素树向下传递了。

实际工作中DataContext的用法是非常灵活的,如:

(a) 当UI上的多个控件都使用Binding关注同一个对象时,不放使用DataContext;

(b) 当作为Source的对象不能被直接访问时;

G)使用集合对象作为列表控件的ItemSource

ItemsSource里面放的是一条一条的数据,要想把数据显示出来需要为他们穿上外衣,条目容器就起到数据外衣的作用。只要我们为一个ItemsSource对象设置了ItemsSource属性值,ItemsControl对象就会自动迭代其中的数据元素,为每一个数据元素准备一个条目容器,并使用Binding在条目容器与数据元素之间建立起关联。

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

H)使用ADO.Net对象作为Binding的源

ListView不同于GridView;前者派生与ListBox,而后者派生于ViewBase,ListBox的View属性是一个ViewBase类型的对象,所以GridView可以作为ListView的View来使用而不能当做独立的控件来使用。

其次,GridView内容属性是Columns,ListBox使用的是DisplaymemberPath属性(类型为string)。

I)使用XML数据作为Binding的源

.Net FrameWork提供了两套处理XML数据的类型:符合DOM(Document Object Model,文档对象模型)标准的类库;以LINQ(language-integrated Query,语言集成查询)为基础的类库;

需要注意的是,当使用XML数据作为Binding的Source时我们将使用XPath属性而不是Path属性来指定数据来源。

XmlDataProvider还有一个名为Source的属性,可以用它直接指定XML文档所在的位置(无论是在本地硬盘还是在网络上)。

需要注意的是,如果把XmlDataProvider直接写在XAML代码里,那么它的XML数据需要放在<x:XData>...</x:XData>标签里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值