微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,12,0">
<ListBox Height="297" ItemsSource="{Binding}" HorizontalAlignment="Left" Margin="35,35,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://www.voidcn.com/article/p-zemyqrow-ps.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐