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

    -_- !

  • 相关阅读:
    性能优化之_android多线程
    bootstrap搜索样式
    bootstrap模态框通过传值解决重复提交问题
    web请求乱码问题总结
    jsp页面自动换行
    cron表达式
    js中简单操作
    文件上传(前端)
    viz.js操作流程
    graphviz.js划线操作
  • 原文地址:https://www.cnblogs.com/pasoraku/p/2732427.html
Copyright © 2011-2022 走看看