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

    本文来自小猪change 的博客,原文地址:http://blog.sina.com.cn/s/blog_59a314c70100mv09.html

  • 相关阅读:
    bower使用记录
    前端生成二维码
    删除顽固node_modules
    vue初体验:实现一个增删查改成绩单
    H5常用代码:适配方案5
    H5常用代码:适配方案4
    H5常用代码:适配方案3
    ARFA 教堂的第四次洗礼&斜率优化重学
    CSP考前总结&周二晚+周三晚模拟考总结&洛谷11月月赛 III Div.1总结
    T44253 绝美的挣扎 题解
  • 原文地址:https://www.cnblogs.com/lmyhao/p/1913975.html
Copyright © 2011-2022 走看看