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

    一、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}" />

    -_- !

  • 相关阅读:
    11111 Generalized Matrioshkas
    Uva 442 Matrix Chain Multiplication
    Uva 10815 Andy's First Dictionary
    Uva 537 Artificial Intelligence?
    Uva 340 MasterMind Hints
    SCAU 9508 诸葛给我牌(水泥题)
    Uva 10420 List of Conquests(排序水题)
    Uva 409 Excuses, Excuses!
    10/26
    11/2
  • 原文地址:https://www.cnblogs.com/pasoraku/p/2732427.html
Copyright © 2011-2022 走看看