`
Virgo_S
  • 浏览: 1151055 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Silverlight 数据绑定(Binding)

    博客分类:
  • .NET
阅读更多
http://blog.csdn.net/banmuhuangci/archive/2009/05/08/4160092.aspx
    在使用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进行 如:(微软示例)
1.定义源对象。
public class Dog
{
    public string DogName { get; set; }
}


2.在 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 节创建源对象的实例。
<Grid.Resources>
    <my:Dog x:Name="MyDog" DogName="Spot"/>
</Grid.Resources>

4.通过设置 Source 属性或 DataContext 属性绑定到源对象。该元素的所有子级都继承 DataContext。
<TextBlock Text="{Binding DogName, Source={StaticResource MyDog}, Mode=OneTime}"/>

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

此例中数据源是一个XAML对象,该对象是代码中创建的MyDog类的一个实例。Binding是在XAML中的TextBlock中指定的Binding,如示例中的代码那样指定的话,也就相当于创建了以个Binding对象 并制定其路径(DogName)和模式等
使用代码创建绑定
1.添加 System.Windows.Data 命名空间。
using System.Windows.Data; (Binding类的命名空间)

2.定义源对象。
public class Dog
{
    public string DogName { get; set; }
}

3.创建要绑定到的 FrameworkElement。
<Grid x:Name="LayoutRoot" Background="White">
    <TextBlock x:Name="MyTextBlock" Text="Test"/>
</Grid>

4.创建源对象的实例。
Dog MyDog = new Dog();
MyDog.DogName = "Spot";

5.创建绑定对象。
Binding MyBinding = new Binding();

6.对绑定对象设置绑定属性。
MyBinding.Path = new PropertyPath("DogName");
MyBinding.Mode = BindingMode.OneTime;

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

MyTextBlock.DataContext = MyDog;

8.将此绑定附加到 FrameworkElement 的属性。
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;
            }
        }
    }
}

<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文档中都有,清楚基本概念后,万变不离其中。











分享到:
评论

相关推荐

    exprss blend silverlight 数据绑定

    在本文中,我们将深入探讨Silverlight中的数据绑定,特别是如何绑定到集合数据。数据绑定是Silverlight应用程序中连接用户界面(UI)与数据模型的重要机制,使得UI元素能够动态反映数据的变化。 首先,数据绑定可以...

    Silverlight绑定数据的例子

    **Silverlight绑定数据**是微软开发的一个关键技术,用于在用户界面和应用程序逻辑之间建立桥梁,使得数据能够自动更新UI元素,极大地简化了UI与后台数据的交互。本示例源码提供了一个直观的教学,展示了如何在...

    Silverlight绑定数据的例子.zip

    在这个"Silverlight绑定数据的例子.zip"压缩包中,我们很可能会找到一个演示如何在Silverlight应用中实现数据绑定的实例。 在Silverlight中,数据绑定主要通过XAML(Extensible Application Markup Language)来...

    SilverLight Grid 数据绑定

    - **数据绑定表达式**: XAML中的{Binding}标记用于创建数据绑定表达式,可以指定要绑定的属性和数据源。 2. **Grid控件** - **Grid控件**是Silverlight中的布局容器,用于组织和定位子元素。它通过行和列定义来...

    Silverlight绑定

    Silverlight绑定是其核心特性之一,它使得数据与用户界面元素之间的通信变得简单而直观。本文将深入探讨Silverlight中的动态Binding,以及如何在实际开发中利用这一功能。 首先,我们需要理解什么是数据绑定。数据...

    [其他类别]Silverlight绑定数据的例子_silverlightdatabinding(ASP.NET源码).rar

    这个压缩包文件名为“[其他类别]Silverlight绑定数据的例子_silverlightdatabinding(ASP.NET源码).rar”,显然包含了关于Silverlight数据绑定的示例代码,特别是与ASP.NET相关的部分。数据绑定是编程中的关键概念...

    Silverlight绑定数据的例子_aspx开发教程.rar

    在.NET框架中,Silverlight是一种强大的富客户端技术,它允许开发者创建交互式、图形丰富的Web...通过阅读并实践"Silverlight绑定数据的例子_silverlightdatabinding"这份教程,你应该能更好地理解和运用这一关键技术。

    silverlight使用数据模板自定义数据显示

    在本文中,我们将深入探讨Silverlight中的数据模板和自定义数据绑定,特别是在Silverlight 3.0版本中的应用。数据模板是WPF和Silverlight中一个强大的特性,它允许我们以自定义的方式显示数据对象,使得UI设计更加...

    ASP.NET-[其他类别]Silverlight绑定数据的例子.zip

    在这个"ASP.NET-[其他类别]Silverlight绑定数据的例子.zip"压缩包中,包含的项目很可能是展示如何在Silverlight应用中实现数据绑定的示例。具体可能包括以下内容: 1. **XAML中的数据绑定**:XAML文件可能会包含...

    WPF解析XML文档绑定到UI前台

    在XAML中,我们通过`DataContext`属性设置UI元素的数据上下文,然后使用`Binding`标记扩展将控件属性绑定到ViewModel的属性。 3. **绑定XML数据到UI**: 一旦XML文档加载并解析,我们可以创建一个ViewModel,将XML...

    (15)silverlight数据源对象的访问

    Silverlight中的`Binding`类是实现数据绑定的主要工具,可以通过设置`Source`属性指定数据源,`Path`属性指定要绑定的属性路径。此外,还可以设置`Mode`属性来控制数据流向,例如单向或双向绑定。 为了简化数据绑定...

    silverlight datagrid动态绑定dictionary 列表

    数据绑定是WPF和Silverlight中的核心概念,它使得UI元素可以与数据源自动同步。为了动态绑定Dictionary到DataGrid,我们需要设置DataGrid.ItemsSource属性。这通常在XAML或代码-behind中完成,将Dictionary对象绑定...

    第4季数据绑定和数据库开发基础)-杨中科

    在示例中,通过`&lt;CheckBox IsChecked="{Binding IsChecked,ElementName=checkBox1}"&gt;`,两个CheckBox实现了同步选中状态,这正是数据绑定的作用。它简化了代码,使得UI更新与模型的更改可以自动同步。 2. **数据...

    Silverlight + WCF 数据压缩

    这通常是在服务配置文件(如web.config或app.config)中修改绑定设置,例如设置`&lt;binding messageEncoding="Mtom"`,并启用`&lt;gzipStreamedEncodingBindingElement&gt;`。 5. **安全性和兼容性**:虽然压缩可以提高效率...

    silverlight实现数据源和控件同步更新

    总结来说,Silverlight实现数据源和控件同步更新涉及数据绑定、DataContext、TwoWay绑定、INotifyPropertyChanged接口、UpdateSourceTrigger属性、CollectionViewSource、MVVM模式以及数据验证等多个方面。...

    Silverlight4连接sql2005查询绑定datagrid

    在本文中,我们将深入探讨如何使用Silverlight 4与SQL Server 2005进行交互,特别是关于查询数据并将其绑定到datagrid控件的过程。Silverlight是微软开发的一个富互联网应用程序(RIA)框架,用于创建具有丰富媒体和...

    微软Silverlight探秘教程(之(数据源对象的访问

    在深入了解微软Silverlight技术时,数据绑定和数据源的访问是核心概念之一。本教程旨在帮助开发者掌握如何在Silverlight应用程序中有效地利用数据源对象,从而实现动态且交互丰富的用户体验。 Silverlight是微软...

Global site tag (gtag.js) - Google Analytics