Silverlight的数据绑定

Silverlight的数据绑定,第1张

概述Silverlight数据绑定有三种模式(没有WPF的 OneWayToSource 模式),如下: OneTime:一次绑定,在绑定创建时使用源数据更新目标,适用于只显示数据而不进行数据的更新。 这是绑定的默认情况。 OneWay:单向绑定,在绑定创建时或者源数据发生变化时更新到目标,适用于显示变化的数据。 TwoWay:双向绑定,在任何时候都可以同时更新源数据和目标。 下面是这三种的代码演示:

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的数据绑定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1040716.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存