
Silverlight数据绑定有三种模式(没有WPF的 OneWayToSource 模式),如下:
OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。 这是绑定的默认情况。 OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。 TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。下面是这三种的代码演示:
OneTime 绑定这种数据绑定模式,只是显示数据而不对数据做任何修改,默认的绑定模式就是OneTime绑定。
绑定到一个实体的一个属性:
Xaml 文件
<TextBlock x:name="tb_1" Text="{Binding I}" margin="100,50,100,200" />
或者可以稍稍复杂的写法:
<TextBlock x:name="tb_1" Text="{Binding Path=I}" margin="100,200" />
CS 代码文件
using System;using System.Collections.Generic;using System.linq;using System.Net;using System.windows;using System.windows.Controls;using System.windows.documents;using System.windows.input;using System.windows.Media;using System.windows.Media.Animation;using System.windows.Shapes;namespace SilverlightApplication_Binding{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private voID UserControl_Loaded(object sender,RoutedEventArgs e) { BindingDemoObject o = new BindingDemoObject(); o.I = 15; tb_1.DataContext = o; } } public class BindingDemoObject { public int I {get;set;} }}
如果要绑定到一个实体,则演示代码如下:
<TextBlock x:name="tb_1" Text="{Binding}" margin="100,200" />
private voID UserControl_Loaded(object sender,RoutedEventArgs e){ int w = 30; tb_1.DataContext = w; // 当然也可以写成: // tb_1.DataContext = 30;}OneWay 绑定
如果需要在数据源发生变化时能够通知UI进行相应的更新,则需要使用单向绑定OneWay或者双向绑定TwoWay。
若要支持 OneWay 或 TwoWay 绑定,从而使绑定目标属性能够自动反映绑定源的动态更改(例如,用户编辑窗体后,预览窗格会自动更新),类需要提供相应的属性更改通知。即创建实现 INotifyPropertyChanged 的类。
下面要演示的例子是当点击按钮时,实体的一个属性发生变化,继而前台显示也发生变化。
Xaml 文件
<GrID x:name="LayoutRoot" Background="White"> <TextBlock x:name="tb_1" Text="{Binding I,Mode=OneWay}" margin="100,200" /> <button Content="变化" margin="222,112,0" name="button1" WIDth="75" Click="button1_Click" />
GrID>
CS 代码文件
using System;using System.Collections.Generic;using System.linq;using System.Net;using System.windows;using System.windows.Controls;using System.windows.documents;using System.windows.input;using System.windows.Media;using System.windows.Media.Animation;using System.windows.Shapes;namespace SilverlightApplication_Binding{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } BindingDemoObject o = new BindingDemoObject(); private voID UserControl_Loaded(object sender,RoutedEventArgs e) { o.I = 15; tb_1.DataContext = o; } private voID button1_Click(object sender,RoutedEventArgs e) { o.I = 58; } } public class BindingDemoObject : System.ComponentModel.INotifyPropertyChanged { private int _i = 0; public int I { get { return _i; } set { _i = value; OnPropertyChanged("I"); } } ////// Declare the event /// public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; ////// Create the OnPropertyChanged method to raise the event /// /// protected voID OnPropertyChanged(string name) { System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this,new System.ComponentModel.PropertyChangedEventArgs(name)); } } }}
TwoWay 绑定
网上很多例子没有 Twoway的演示,下面就是一个 Twoway的演示。
Xaml 文件
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/Expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="SilverlightApplication_TwoWayBinding.MainPage" WIDth="400" Height="200" mc:Ignorable="d"> <GrID x:name="LayoutRoot" Background="White"> <Ellipse Fill="#FF2F70C0" stroke="Black" Height="57" HorizontalAlignment="left" margin="52,28,0" VerticalAlignment="top" WIDth="{Binding Value,Elementname=silderSelf,Mode=OneWay}" /> <SlIDer x:name="silderSelf" Height="30" margin="52,103,48,0" VerticalAlignment="top" Maximum="300" Minimum="10" LargeChange="10" SmallChange="1" Value="100" WIDth="300"/> <TextBox Height="30" HorizontalAlignment="left" margin="52,150,0" VerticalAlignment="top" WIDth="150" Text="{Binding Value,Mode=TwoWay}" textwrapPing="Wrap"/> GrID> UserControl>
演示效果:
解释:
这里我们把椭圆的宽度和 TextBox 的值捆绑到 SlIDer 的值。
对椭圆的捆绑是 OneWay 模式, 表示只是读取SlIDer 的值。
TextBox 的捆绑则是 TwoWay, 表示我们即可以接受 SlIDer 的值,也可以设置 SlIDer 的值。 当 TextBox 中输入了值,按 Tab 离开焦点后,我们就可以看到 SlIDer 和 椭圆的值都发生变化了。
当我们移动 SlIDer 时, TextBox 的值和 椭圆的宽度都发生变化。
参考资料:
一步一步学Silverlight 2系列(11):数据绑定
http://www.cnblogs.com/Terrylee/archive/2008/03/08/Silverlight2-step-by-step-part11-Data-Binding.html
如何在Blend设置数据绑定
http://msdn.microsoft.com/zh-cn/library/cc295161(Expression.30).aspx
silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
http://www.cnblogs.com/yjmyzz/archive/2009/11/09/1599058.html
以上是内存溢出为你收集整理的Silverlight的数据绑定全部内容,希望文章能够帮你解决Silverlight的数据绑定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)