在使用Silverlight进行开发的时候,会觉得数据的操作是在是非常简单,不管是用WCF还是Webclient在于服务器通信后,Silverlight处理并显示数据都非常的方便,TextBlock TextBox等控件的使用方法也很容易掌握,但是,Silverlight依旧按照.net的传统提供了数据绑定的功能,使用数据绑定可以让Silverlight的数据操作更加灵活,有序。

开发过ASP.NET都知道数据的绑定是多么的常用和重要,页面自动更新数据,更具不同的用户操作显示不同的数据可以说是WEB开发的基础,同样Silverlight中的数据绑定也非常重要。

在微软提供的Silverlight文档中详细的描述了数据绑定的各种方法。不过,由于Silverlight中的绑定与ASP.NET中的数据绑定还有是少许差别,刚接触Silverlight的开发员看过文档后会有不知其所以然的感觉。下面本文就用通俗的方法说明一下。

首先,Silverlight进行数据绑定的类Binding,这个类提供了相当丰富的方法和属性。

具体成员列表和说明可在Silverlight文档中找到。

需要关心的是 Binding类提供了 OneTime OneWay TwoWay三个属性,这三个属性可以指定数据源与目标的互动方式。及一次性绑定,目标随数据源变化而变化,目标和数据源同步变化。

Binding类不是很复杂,可以说是一个数据源与目标的中间协调员,用到数据绑定将肯定用到它,具体的说明在Silverlight文档中可以找到。

进行数据绑定可以通过XAML进行 如:(微软示例)

在 XAML 中创建绑定

  1. 定义源对象。

    C#   
    public class Dog
    {public string DogName { get; set; }
    }
       
     

  2. 在 XAML 中创建对源对象的命名空间的引用。

    XAML   
    <UserControl x:Class="BindingXAML.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:BindingXAML">
  3. 在 Resources 节创建源对象的实例。

    XAML   
    <Grid.Resources><my:Dog x:Name="MyDog" DogName="Spot"/>
    </Grid.Resources>
  4. 通过设置 Source 属性或 DataContext 属性绑定到源对象。该元素的所有子级都继承 DataContext。

    XAML   
    <TextBlock Text="{Binding DogName, Source={StaticResource MyDog}, Mode=OneTime}"/>
    

    - 或 -

    XAML   
    <TextBlock Text="{Binding DogName, Mode=OneTime}" DataContext="{StaticResource MyDog}"/>

此例中数据源是一个XAML对象,该对象是代码中创建的MyDog类的一个实例。Binding是在XAML中的TextBlock中指定的Binding,如示例中的代码那样指定的话,也就相当于创建了以个Binding对象 并制定其路径(DogName)和模式等。

使用代码创建绑定

  1. 添加 System.Windows.Data 命名空间。

    C#   
    using System.Windows.Data; (Binding类的命名空间)
       
     

  2. 定义源对象。

    C#   
    public class Dog
    {public string DogName { get; set; }
    }
       
     

  3. 创建要绑定到的 FrameworkElement。

    XAML   
    <Grid x:Name="LayoutRoot" Background="White"><TextBlock x:Name="MyTextBlock" Text="Test"/>
    </Grid>
  4. 创建源对象的实例。

    C#   
    Dog MyDog = new Dog();
    MyDog.DogName = "Spot";
       
     

  5. 创建绑定对象。

    C#   
    Binding MyBinding = new Binding();
       
     

  6. 对绑定对象设置绑定属性。

    C#   
    MyBinding.Path = new PropertyPath("DogName");
    MyBinding.Mode = BindingMode.OneTime;
       
     

  7. 通过设置 Source 属性或 DataContext 属性来设置绑定源。该元素的所有子级都继承 DataContext。

    C#   
    MyBinding.Source = MyDog;
       
     

    - 或 -

    C#   
    MyTextBlock.DataContext = MyDog;
       
     

  8. 将此绑定附加到 FrameworkElement 的属性。

    C#   
    MyTextBlock.SetBinding(TextBlock.TextProperty, MyBinding);

以上示例中是通过代码创建绑定的示例。这个示例中在TextBlock的Text属性中就没有创建Binding对象了,而是通过后台创建好Binding对象,并设置好属性,然后通过MyTextBlock.SetBinding(TextBlock.TextProperty, MyBinding);将TEXT属性进行绑定。

在两个示例中都可以看到,指定数据源有两种方法,以TextBlock为例,可以指定Binding类的Source属性到数据源,也可以将TextBlock的DataContext指定到数据源,效果一样,如果TextBlock没有指定数据源,会在其绑定的Binding中寻找是否有数据源。

在实际开发中,为了让程序更可看更有条理,我们会混合使用两种方法,及在后台创建数据源,在XAML中绑定。这样前台就免去了创建数据源的XAML元素,后台省去了创建Binding类的代码,并且通过查看前台的XAML代码就可以很容易的判断出各个控件的绑定数据。

代码:

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;

using System.Windows.Data;

namespace SilverlightTest

{

public partial class Databind : UserControl

{

public Databind()

{

InitializeComponent();

}

private void UserControl_Loaded(object sender, RoutedEventArgs e)

{

Mind m = new Mind();

txt1.DataContext = m;

}

}

public class Mind  //数据源

{

string _info="OK";

public string Info

{

get

{

return _info;

}

set

{

_info = value;

}

}

}

}

XAML:

<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="SilverlightTest.Databind"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Width="400" Height="300" Loaded="UserControl_Loaded">

<Grid x:Name="LayoutRoot" Background="White">

<TextBlock  x:Name="txt1" Text="{Binding Info,Mode=OneTime}" />

</Grid>

</UserControl>

这样的写法让数据绑定可读性更高,也更容易理解,最常用的方式。

下面来比对下XAML创建和代码创建:

{Binding Info,Mode=OneTime}

相当于

Binding MyBinding = new Binding();

MyBinding.Path = new PropertyPath("Info");
MyBinding.Mode = BindingMode.OneTime;

Text="{Binding Info,Mode=OneTime}"

相当于

MyTextBlock.SetBinding(TextBlock.TextProperty, MyBinding);

<TextBlock Text="{Binding DogName, Mode=OneTime}" DataContext="{StaticResource MyDog}"/>中的 DataContext="{StaticResource MyDog}

相当于

txt1.DataContext = m;

以上就是在Silverlight中数据绑定的一些简要介绍。

混合XAML 和代码的创建数据绑定的方式是最容易理解和阅读的,所以我们经常会看到在使用DataGrid的通过制定ItemsSource 到数据源后,在XAML中就直接使用"{Binding Address}"进行数据绑定了,DataGrid中的ItemSource也就相当于TextBlock的DataContext属性了,其他控件的数据绑定方法了类似,另外数据源可以用类,也可以是字符串类型等常量类型,使用常量类型时,就不需要指定Binding的Path属性了,因为他本身就是数据。

另外,Binding还有许多高级用法,例如控件对数据的共享,数据的更新绑定等,这些内容在Silverlight文档中都有,清楚基本概念后,万变不离其中。

转载于:https://www.cnblogs.com/ZetaChow/archive/2009/05/08/2237349.html

Silverlight 数据绑定(Binding)相关推荐

  1. Silverlight数据绑定之DataGrid

    Silverlight数据绑定之DataGrid 时间:2011-08-03 01:59来源:网易博客 作者:Wilson. 点击:次 注:所有代码以C#为例 DataGrid绑定的数据对象: 1.D ...

  2. 使用 Castal DynamicProxy 简化 Silverlight 数据绑定

    大家都知道, 在使用 Silverlight 数据绑定的时候, 为了使源对象的更改能够传播到目标,源必须实现 INotifyPropertyChanged 接口.INotifyPropertyChan ...

  3. silverlight数据绑定模式TwoWay,OneWay,OneTime的研究

    asp.net开发中,数据绑定是一个很简单的概念,控件与数据绑定后,控件可以自动把数据按一定的形式显示出来.(当然控件上的值改变后,可以通过提交页面表单,同时后台服务端代码接收新值更新数据) silv ...

  4. 【转载】wpf数据绑定binding与INotifyPropertyChanged

    WPF数据绑定号称是:数据变化会通过界面更新数据,这对新手而言,绝对是个误区,在我听说这句话的时候,我真是高兴,用了以后才发现其实没有那么美.要实现前面号称的特性,需要三个条件:1.进行绑定,2.绑定 ...

  5. silverlight数据绑定

    2019独角兽企业重金招聘Python工程师标准>>> 前台代码: <navigation:Page x:Class="story.databind"    ...

  6. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日) 本周Silverlight学习资源更新 用Silverlight做淘宝应用 往事如锋 基于 Si ...

  7. Silverlight实用窍门系列:56.Silverlight中的Binding使用(一)【附带实例源码】

    本文将详细讲述Silverlight中Binding,包括Binding的属性和用法,Binding的数据流向. Binding:一个完整的Binding过程是让源对象中的某个属性值通过一定流向规则进 ...

  8. Silverlight实用窍门系列:58.Silverlight中的Binding使用(三)-数据集合绑定

      在本文中将以ListBox为例讲述在Silverlight中Binding数据集合. 在这里我们将实体集的绑定分为三类:    一.直接控件绑定.    二.DataTemplate模板绑定.   ...

  9. Windows8/Silverlight/WPF/WP7周学习导读(11月12日-11月18日)

    Windows8/Silverlight/WPF/WP7/HTML5周学习导读(11月12日-11月18日) 本周Windows 8开发学习资源更新 快速构建Windows 8风格应用25-数据绑定 ...

  10. 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月14日-5月20日)

    分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月14日-5月20日) 本周Silverlight学习资源更新 MVVM设计模式相关--Silverlight商 ...

最新文章

  1. bzero, memset ,setmem 区别
  2. iOS 获取指定时间的前后N个月
  3. 灵活越障、花样空翻,腾讯轮腿式机器人亮相机器人顶会 ICRA
  4. 信息系统项目管理师-论文专题(三)范围管理论文写作
  5. Careercup - Google面试题 - 4877486110277632
  6. 雅马哈php mt7,雅马哈专业录音室监听耳机 HPH-MT7 正式发售!
  7. AndroidMVP
  8. 【转】Add a user/Administrator to Windows Server 2008
  9. 【深入浅出通信原理-学习笔记】信道
  10. c++程序内嵌lua字节码
  11. 2019小程序没必要做了_2019,小程序会更好吗?
  12. html中如何写平方根等,平方根一定是整数吗
  13. 决斗小游戏代码html,《游戏王:决斗链接》的基础玩法介绍
  14. OTRS安装使用系列之一——安装及初始…
  15. 智能化城市中数字孪生技术的发展趋势及在各领域的运用详情分析
  16. java夯实基础-基本数据类型
  17. GBDT和Xgboost对比
  18. PHP二维码解析demo
  19. mysql join w3cshool_mysql innerjoin left join right join 解析
  20. 使用ceph的块存储rbd

热门文章

  1. 迁移solaris ufs根文件系统至zfs根文件系统
  2. 数据库表可以没有外键
  3. FPGA系列之一:Cyclone V中的时钟资源
  4. navigationcontroller和navigationbar和navigationitem之间的区别以及不用nib实现点击屏幕关闭虚拟键盘20130911...
  5. 新商业模式 私下销售 Private Sales Gilt Groupe年营收1.5亿
  6. vs2008软件测试实战 1
  7. 从研发角度谈存储技术的学习
  8. 获取汉字首字母,拼音,可实现拼音字母搜索----npm js-pinyin
  9. babel-preset-env使用介绍
  10. 全双工音频播放器在c#中使用waveIn / waveOut api