原文地址:
为什么要使用数据邦定?我们完全可以使用代码完成一切。但是绑定要简单得多。文章中通过一个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 Name和Assembly。
<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(默认),OneWay和OneTime
l TwoWay保证Bound Control(被绑定控件)和Source(绑定源)始终一致。
l OneWay模式中,一旦Source发生改变,Bound Control就会随动。反之不然。
l OneTime相当于赋初值。启动时进行,之后数据不再绑定。
如果你想让被绑定控件中的值更新到源,可以使用UpdateSourceTrigger来控制进行更新的时间。例如,{Binding ElementName=theTextBox, Path=Text, UpdateSourceTrigger=LostFocus}。UpdateSourceTrigger只有在Mode=TwoWay时有效。
最后介绍的是DataContext。它的目的是使得一个Container中的所有控件有一个通用的数据源对象。DataContext可以是Xml也可以使Object。如果是Xml,Container中的控件在绑定时需要使用XPath。如果是Object,那就使用Path指定Object的属性。

浙公网安备 33010602011771号