wp7数据绑定

数据绑定提供了一种数据呈现与交互的简捷方式,使得数据与UI分离,并能自动更新、同步。
绑定有绑定目标、绑定源、绑定模式、转换器等要素。。
绑定目标为Silverlight控件,可以是FrameworkElement类型的对象,实际上绑定的是该控件的一个特定属性。
绑定源为数据对象,也可以是任意的CLR对象。
转换器:进行数据类型或格式的转换。
绑定模式,三种模式的数据绑定。
( 1)OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。
(2)OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。
(3)TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。
当模式为OneWay或TwoWay时,源对象必须实现INotifyPropertyChanged接口。
绑定源的方式有:
(1) Source:表示绑定源对象。
(2) RelativeSource,指定绑定源相对于绑定目标的位置来标识绑定源。
(3) ElementName,绑定源也是UI对象。
可以在C#代码中,也可以在XAML声明中进行绑定,现列举常见的几种绑定方式:
(1) 绑定源为UI对象。
通过slider的值来控制矩形控件图形的宽度。
<Slider Name="slider" Value="20" Maximum="200" />
<Rectangle ;{Binding Path=Value,Mode=OneWay,ElementName=slider}" /> 
Mode默认为OneWay, “Path=”也可可省略,因此上式还可简写为:
<Rectangle ;{Binding Value,ElementName=slider}" />
(2) C#代码中实现绑定
定义数据源:
Public class Classmate
{
public string cName{get;set;}
public int cAge{get;set;}
}

创建同学类的实例作为绑定源:
Public Classmate myClassmate=new Classmate
{
cName=“王根山“,
cAge=”29”
};
Binding bd=new Binding();
Bd.Source= myClassmate;
bd.Path=new PropertyPath(“cName”);
bd.SetBinding(TextBox.TextProperty,cTextBox);

多个控件绑定同一数据源,可统一指定数据源,用DataContext来实现,原数据源赋值语句均可省略。
Canvas1. DataContext= myClassmate;
(3) XAML声明中实现绑定
添加命名空间的支持:
xmlns:local="clr-namespace:WindowsPhoneApplication4"

资源项中实例化类:
<phone:PhoneApplicationPage.Resources>
<local:Classmate x:Key="dataClass" cName="万常山" cAge="28"></local:Classmate>
</phone:PhoneApplicationPage.Resources>

在XAML中实现绑定:
<TextBox Name=“cTextBox” Text=“{Binding path= cName,Mode=OneWay }” />

也可以如同C#代码中实现绑定,在C#代码中定义数据源:
Canvas1.DataContext= myClassmate;
(4) 使用数据绑定设计器实现绑定
除了C#、 XAML来实现绑定,还可借助于Visual Studio的可视化工具,直接实现绑定,实际是XAML实现绑定的可视化方式,自动生成XAML代码。
在属性面板中单击属性右侧的小图标,会弹出菜单,如图4-1所示:
image
图4-1
在弹出菜单中选择Apply Data Binding..,会出现数据绑定设计器,可定义Source、Path等属性,如图4-2:
image
图4-2
案例4-1:数据绑定实现
集合对象的数据绑定,用自定义模板方式实现。
(1)创建Windows Phone程序。
(2)添加新类Classmate
public class Classmate
{
public int cId { get; set; }
public string cName { get; set; }
public int cAge { get; set; }
}

(4) XAML页面绑定代码如下:
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox Height="297" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="35,35,0,0" Name="listBox1" VerticalAlignment="Top" ;357" >
<ListBox.ItemTemplate >
<DataTemplate >
<StackPanel Height="50" HorizontalAlignment="Center" ;480" VerticalAlignment="Top" Orientation="Horizontal" >
<TextBlock Height="60" HorizontalAlignment="Left" Text="{Binding cId}" VerticalAlignment="Top" ;100" />
<TextBlock Height="60" HorizontalAlignment="Left" Text="{Binding cName}" VerticalAlignment="Top" ;100" />
<TextBlock Height="60" HorizontalAlignment="Left" Text="{Binding cAge}" VerticalAlignment="Top" ;100" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

(5) 在C#代码中定义数据源:
ObservableCollection<Classmate> classmates=new ObservableCollection<Classmate>
{
new Classmate {cId=1,cName ="王启大",cAge=28},
new Classmate {cId=2,cName ="万正领",cAge=25},
};
public MainPage()
{
InitializeComponent();
listBox1.DataContext = classmates;
}

(6)F5运行,效果如下:
(W)6`R}Z6J)HIJI]0%`RI0F

本文出自 “蓝海战术” 博客,请务必保留此出处http://wanxl.blog.51cto.com/2129901/582105

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值