绑定有绑定目标、绑定源、绑定模式、转换器等要素。。
绑定源为数据对象,也可以是任意的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=”也可可省略,因此上式还可简写为:
Mode默认为OneWay,“Path=”也可可省略,因此上式还可简写为:
<Rectangle ;{Binding Value,ElementName=slider}" />
定义数据源:
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来实现,原数据源赋值语句均可省略。
(3) XAML声明中实现绑定
xmlns:local="clr-namespace:WindowsPhoneApplication4"
资源项中实例化类:
<phone:PhoneApplicationPage.Resources> <local:Classmate x:Key="dataClass" cName="万常山" cAge="28"></local:Classmate> </phone:PhoneApplicationPage.Resources>
在XAML中实现绑定:
Canvas1.DataContext= myClassmate;
(4) 使用数据绑定设计器实现绑定
图4-1
图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; } }
<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运行,效果如下:
本文出自 “蓝海战术” 博客,请务必保留此出处http://www.voidcn.com/article/p-zemyqrow-ps.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。