zoukankan      html  css  js  c++  java
  • SilverLight DataBinding绑定详解(学习笔记)——转载

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

      在使用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#

    1
    2
    3
    4
    public class Dog
    {
        public string DogName { get; set; }
    }
    

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

      XAML

    1
    2
    3
    4
    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

    1
    2
    3
    <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代码就可以很容易的判断出各个控件的绑定数据。

      代码:

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    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文档中都有,清楚基本概念后,万变不离其中。

  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/hl3292/p/2121788.html
Copyright © 2011-2022 走看看