• WPF中的数据绑定(一)


    WPF中提供的代码帮顶技术有很多种,可以根据不同的情况使用不同的方法,十分灵活,下面根据不同的情况进行设置。

    WPF数据绑定(二)

    1、通过代码绑定

     

    1             <TabItem Header="CodeBinding">
    2                 <Grid>
    3                     <Button Content="Button" HorizontalAlignment="Left" Margin="49,116,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
    4                     <TextBox Name="tbCode"  HorizontalAlignment="Left" Height="22" Margin="49,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    5                     <Button Content="Button" HorizontalAlignment="Left" Margin="259,116,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_2"/>
    6                     <TextBox Name="tbCode1"  HorizontalAlignment="Left" Height="22" Margin="259,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
    7                 </Grid>
    8             </TabItem>

       你可以这样在代码设置

    先看看studen类的实现

     1     class Student : INotifyPropertyChanged
     2     {
     3         public string Age { get; set; }
     4         public string Id { get; set; }
     5         private string m_Name;
     6         public string Name
     7         {
     8             get
     9             {
    10                 return m_Name;
    11             }
    12             set
    13             {
    14                 m_Name = value;
    15                 if (PropertyChanged != null)
    16                 {
    17                     this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name"));
    18                 }
    19             }
    20         }
    21 
    22         public event PropertyChangedEventHandler PropertyChanged;
    23     }

    这个各类继承自INotifyPropertyChanged,这个接口的事要目的就是为了在Name属性被改写的时候会通知到你绑定的目标对象去,使目标也已一起变化。属性如果要绑定,需要继承INotifyPropertyChanged接口。

    1     // 摘要:
    2     //     向客户端发出某一属性值已更改的通知。
    3     public interface INotifyPropertyChanged
    4     {
    5         // 摘要:
    6         //     在更改属性值时发生。
    7         event PropertyChangedEventHandler PropertyChanged;
    8     }

    其实我一开始很纠结,因为PropertyChanged没有让我亲自实现,总是觉得很别扭,这厮是怎么被工作的,其实当你完成数据绑定的时候,会自动给这个时间加一个实现的。我们不需要去管它。

    点击按钮的话我会创建一个student类,给Name属性赋值,然后将这个对象绑定到tbcode的Text属性上。

    1         private void Button_Click_1(object sender, RoutedEventArgs e)
    2         {
    3             Student st = new Student();
    4             st.Name = "Jim";
    5             Binding bd = new Binding();
    6             bd.Source = st;
    7             bd.Path = new PropertyPath("Name");
    8             BindingOperations.SetBinding(tbCode, TextBox.TextProperty, bd);
    9         }

    里面有两个比较重要的属性,一个是source一个是path,source是Binding的的源,就是说你的数据源在哪里,另外一个是path就是路径,就是要绑定的具体的数据源是哪个,设置好这两个以后,就可以把这个Binding绑定到你的目标对象上——tbCode,使用BindingOperations.SetBinding,第一个参数是要绑定的对象,第二个参数是你要在这个对象的那个属性上,第三个参数就是之前设置的Binding。

    当然这种写法也可以简化

    1         private void Button_Click_2(object sender, RoutedEventArgs e)
    2         {
    3             Student st = new Student();
    4             st.Name = "Mike";
    5             tbCode1.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = st });
    6         }
    tbCode1.SetBinding这个的实现就是把上面的BindingOperations.SetBinding进行了一个封装。
    不过有一点我不明白,我是先给st赋值的,然后再进行绑定,为什么这个时候也会同时textblock空间进行更新呢?希望高手指点。

    2、UIElementBInding绑定
    这个绑定很简单,也很常用。
    如果我有一个silder,一个textbox来显示他的value,应该怎么做?当然你可以实现ValueChanged方法。但是用绑定会更加的灵活。

    1             <TabItem Header="UIElementBInding">
    2                 <Grid>
    3                     <Slider x:Name="slider" HorizontalAlignment="Left" Margin="50,195,0,0" VerticalAlignment="Top" Width="393"/>
    4                     <TextBox HorizontalAlignment="Left" Height="23" Margin="113,77,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding Value, ElementName=slider}"/>
    5 
    6                 </Grid>
    7             </TabItem>

    你不需要写一行C#代码就能够完成。Text="{Binding Value, ElementName=slider}"意思是要绑定到哪个控件(slider)的哪个属性(Value)上。

    C#的绑定有很多,这里先介绍两种,剩下的后面会一一介绍。

    代码地址:

    https://github.com/Dothegod/WPF_Training_Sample

  • 相关阅读:
    ORACLE表空间管理维护
    oracle表分区详解
    Jquery
    B
    A
    E
    字符串排成字典序,字符串数组
    命令,快捷键,配置
    第一个java程序
    A
  • 原文地址:https://www.cnblogs.com/HighFun/p/2865182.html
Copyright © 2020-2023  润新知