zoukankan      html  css  js  c++  java
  • WPF的Binding学习笔记(一)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/20/2732427.html

    一、binding的一般步骤 1,准备数据源     数据源需要实现INotifyPropertyChanged接口     例如:

    复制代码
    class Person : INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;
      private string name;
      public string Name
      {
        get { return name; }
        set
        {
          name = value;
          //触发事件
          if (PropertyChanged != null)
          {
                        PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
          }
        }
      }
    }
    复制代码

    2,准备Binding对象

    Person p = new Person("D-boy");
    Binding binding = new Binding();
    binding.Source = p;
    binding.Path = new PropertyPath("Name");

    3,用Binding对象将数据源和目标连结 假如在XAML处添加了一个TextBlock目标

    <TextBlock x:Name="txtName"></TextBlock>

    那么可以使用BindingOperations.SetBinding()方法将其进行binding了。

    BindingOperations.SetBinding(txtName, TextBlock.TextProperty, binding);

    也可以使用UI元素的基类FramworkElement封装的SetBinding函数

    txtName.SetBinding(TextBlock.TextProperty, binding);

    将上面两步结合在一起可以这样写

    txtName.SetBinding(TextBlock.TextProperty, new Binding("Name") { Source=p});

    二、控件间的Binding XAML处如下两个控件

    <TextBox x:Name="txt1" />
    <TextBlock x:Name="txt2" Text="{Binding Path=Text, ElementName=txt1}" />

     如果要改变Binding源的触发事件,可以设置Binding的UpdateSourceTrigger属性为LostFocus、Explicit、PropertyChanged中的一种。
    三、Binding的Path 1,Path的设置 如上例, XAML处为

    <TextBlock x:Name="txt2" Text="{Binding Path=Text, ElementName=txt1}" />

    或是

    <TextBlock x:Name="txt2" Text="{Binding Text, ElementName=txt1}" />

    相应的C#代码为

    txt2.SetBinding(TextBlock.TextProperty, new Binding(){ Path=new PropertyPath("Value"),Source=txt1});

    或是

    txt2.SetBinding(TextBlock.TextProperty, new Binding("Text") { Source=txt1});

    之类的... 2,Path还支持一路点下去~~ 比如

    <TextBlock x:Name="txt2" Text="{Binding Text.Length, ElementName=txt1}" />
    <TextBlock x:Name="txt2" Text="{Binding Text.[2], ElementName=txt1}" />

    3,当数据源本身就是数据的时候,Path为. window添加命名空间

    xmlns:sys="clr-namespace:System;assembly=mscorlib"

    添加资源

    <Window.Resources>
         <sys:String x:Key="string">
                string!!!!!
         </sys:String>
    </Window.Resources>

    使用Binding

    <TextBlock x:Name="txt2" Text="{Binding ., Source={StaticResource ResourceKey=string}}" />

    精简为

    <TextBlock x:Name="txt2" Text="{Binding Source={StaticResource ResourceKey=string}}" />

    当然这样的情况,我就直接

    <TextBlock x:Name="txt2" Text="{StaticResource ResourceKey=string}" />
  • 相关阅读:
    VS2012的恢复默认窗口的基本常用设置
    在 CentOS 6.4 上安装 CloudStack 4.2
    centos7上安装mysql
    myeclipse安装aptana插件
    访问WEB-INF下的JSP (转载)
    通过字节流复制大文件内容到指定的文件
    java 通过bufferedReader和bufferedWriter 拷贝文件
    Date类获取日期的方法失效的解决办法
    java中string 类型的对象间比较的学习笔记
    ubuntu下搭建nfs服务器
  • 原文地址:https://www.cnblogs.com/qixue/p/5023224.html
Copyright © 2011-2022 走看看