renmin  
常常被别人以为是高手
 

原文地址:

http://msdn.microsoft.com/windowsvista/default.aspx?pull=/library/en-us/dnlong/html/WPFDataBinding_Pt1.asp

 

为什么要使用数据邦定?我们完全可以使用代码完成一切。但是绑定要简单得多。文章中通过一个RSS Reader的例子,对比了用代码和用绑定完成同一功能的区别,充分体现了绑定的优势。

那么如何绑定呢?文章从一个简单的例子开始讲解。首先介绍了Binding的两种语法。然后介绍了绑定源的概念。

绑定源可以是其它控件,也可以是ObjectData或者XML,可以使用ObjectDataProvider XmlDataProvider,这点和ADO.Net2.0对应。

嵌入的Xml就是Xml island,一般写在Resource中。在Feb CTP 5308中规定 Xml island必须放到<x:XData>…</x:XData>中。所以原文中的例子需要作相应的修改。

XmlDataProvider既可以使用嵌入的Xml,也可以使用Xml文件,还可以使用来自外部的Xml数据,比如RSS

ObjectDataProvider是使用一个Class的实例,所以要指定类的Full Class NameAssembly

<Window.Resources>

<ObjectDataProvider TypeName="XamlExamples.MyStrings, XamlExamples" x:Key="MyStringData" />

</Window.Resources>

这样比较麻烦,也可以使用Map

<?Mapping XmlNamespace="ProjectTypes" ClrNamespace="XamlExamples" ?>

……

 <Window.Resources>

    <c:MyStrings x:Key="MyStringData" />

 </Window.Resources> 

……

Binding有三种模式TwoWay(默认),OneWayOneTime

TwoWay保证Bound Control(被绑定控件)和Source(绑定源)始终一致。

OneWay模式中,一旦Source发生改变,Bound Control就会随动。反之不然。

OneTime相当于赋初值。启动时进行,之后数据不再绑定。

 

如果你想让被绑定控件中的值更新到源,可以使用UpdateSourceTrigger来控制进行更新的时间。例如,{Binding ElementName=theTextBox, Path=Text, UpdateSourceTrigger=LostFocus}UpdateSourceTrigger只有在Mode=TwoWay时有效。

最后介绍的是DataContext。它的目的是使得一个Container中的所有控件有一个通用的数据源对象。DataContext可以是Xml也可以使Object。如果是XmlContainer中的控件在绑定时需要使用XPath。如果是Object,那就使用Path指定Object的属性。

 

posted on 2006-04-12 19:30    阅读(361)  评论(0)    收藏  举报