windows phone:数据绑定
从本质上说,数据绑定可能像你所期望的那样:由于注册了一个事件处理程序,使得一个属性从另外一个属性中获取更新,期间可能进行了一些数据转换。通常你可以完全通过xaml来定义数据绑定。
绑定源与目标
在典型的数据绑定中,一个对象的属性发生变化时,另一个对象的属性也随之自动更新。提供数据的对象被认为是数据绑定的源,接收数据的对象是绑定的目标。
通常给数据绑定源指定一个名字:
<Slider Name="slider" ... />
把目标属性作为一个属性元素并赋值给类型为Binding的对象:
<TextBlock ...>
<TextBlock.Text>
<Binding ElementName="slider" Path="Value" />
</TextBlock.Text>
</TextBlock>
使用ElementName属性指定源元素的名称,使用Path属性指定源属性的名称、有时候这种类型的绑定称为元素名称绑定。
为了使语法更加友好,Silverlight为Binding提供了一个标记扩展,上面代码可以如下表示:
<TextBlock Text="{Binding ElementName=slider,Path=Value}" ... />
注意这里,slider和Value名称的引号皆已经去掉。
Path能把多个名称组合在一起使用。例如,假设Slider没有名称,如果你知道该Slider是ContentPanel元素的Children集合的第一个子元素,你可以间接地引用Slider:
Text="{Binding ElementName=ContentPanel,Path=Children[0].Value}"
或者使用可视化更上一层的元素:
Text="{Binding ElementName=LayoutRoot,Path=Children[1].Children[0].Value}"
若你想要数据绑定是双向的,则可添加以下设置:
TextBlock Text="{Binding ElementName=slider,Path=Value,Mode=TwoWay}"
注:Mode属性为BindingMode枚举类型的成员,Mode属性的默认值是BindingMode.OneWay,另外还有BindingMode.TwoWay和BindingMode.OneTime(该成员表示源只传输一次数据到目标)
绑定转换器
当你拖动Slider时TextBlock显示的Slider值有时是整数,更多时候是双精度浮点数。若你只想显示整数,则需要使用Binding类的Converter属性。
Binding类Converter属性是IValueConverter类型,IValueConverter是一个接口,它包含两个方法:Converter和ConverBack。
Convert方法处理从源到目标的数据转换,而ConverterBack方法则处理双向绑定时另一个方向的转换。
下面是一个简单的转换器例子:
namespace PhoneApp5
{
public class TruncationConverter : IValueConverter
{//转换类
public object Convert(object value, Type targetType,object parameter, CultureInfo culture)
{
if (value is double) //value是从源传递到目标的对象
return Math.Round((double)value);
return value;
}
public object ConvertBack(object value, Type targetType,object parameter, CultureInfo culture)
{
return value;
//如果你的转换类从来不使用在双向绑定上,则return null即可
}
}
}
下面是转换器使用的两种方法:
1.把TruncationConverter类作为资源
<phone:PhoneApplicationPage.Resources>
<local:TruncationConverter x:Key="truncate" />
</phone:PhoneApplicationPage.Resources>
然后在Binding扩展标记中引用这个资源
<TextBlock Text="{Binding ElementName=slider,Path=Value,Converter{StaticResource truncate}}" ... />
2.直接使用www.2cto.com
<TextBlock ...>
<TextBlock.Text>
<Binding ElementName="slider" Path="Value">
<Binding.Converter>
<local:TruncationConverter />
</Binding.Converter>
</Binding>
</TextBlock.Text>
</TextBlock ...>
如果在一个xaml文件中多次使用相同的转换器,最好将它定义为资源,这样能共享唯一实例。
推荐阅读
-
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
-
Windows Phone 7 开发探索笔记5——页面间导航
-
Windows Phone 开发中重力感应的简单使用示例
-
浅谈ASP.NET常用数据绑定控件优劣总结
-
AngularJS入门教程之数据绑定用法示例
-
DevExpress的GridControl的使用以及怎样添加列和绑定数据源
-
与谷歌合作开发Android 微软不考虑推Windows Phone手机
-
微软定于12月16日关闭Windows Phone 8.1应用商店:别了!
-
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
-
7月1日起微软停止为Windows Phone 8.x设备提供应用更新