• WPF绑定


    初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。

    1.绑定使用的关键字:Binding

    2.为什么要?

    把界面上的控件的属性和后台的变量绑定起来,达到效果:在后代修改变量,界面自动更新数据。

    控件的属性必须时依赖属性或者依赖附加属性才能绑定

    3.绑定表达式中常用的关键字:

     Source、ElementName、DataContext、RelativeSource、Path、XPath

    4.例子

    既然要绑定,就会有谁绑定谁的关系,也就是绑定目标,绑定数据源,数据从哪里到哪里。

     

    4.1界面上2个控件进行绑定:使用ElementName指定绑定目标,Path指定绑定目标的具体的属性

      2个textblock,textbloc2的text属性绑定textblock1的text

    上面这种绑定如果不写path呢?找不到绑定目标对象的属性,就会显示绑定目标的对象类型

     

     绑定目标的属性也可能是一个对象,而不是一个基本类型,这时候还可以继续绑定,绑定目标属性的属性的属性,这样。

    如:

    textblock2的text属性绑定textblock1的text的属性的length属性

     

     4.2控件的属性绑定一个string,list,和类对象

    <TextBlock Text="{Binding Mytest}"/>

    Textblock的text属性绑定一个string类型的变量Mytest,Mytest定义在主窗体的cs文件中(MainWindow.xaml.cs)

    public string Mytest { get; set; } = "testvalue";

    先看下结果:

     这时候需要注意一下,textblock控件时在xaml中,Mytest变量是在Class1.cs中,需要指定一个datacontext,不然在xaml中找不到变量Mytest

    在class1类中定义一个list

     界面上控件textblock绑定到这个list,直接绑定list,会显示对象类型,可以通过下标的方式,指定绑定到list中的某个元素

     

     Path可以省略掉,直接写属性,这都没写source,3个textblock会从datacontext去找

     DataContext和resource一样,每个控件对象都有,先找自身的,然后找父对象的,最后找到window窗体的。

    5.RelativeSource:PreviousData TemplatedParent Self FindAncestor

    5.1 Self 

    绑定目标属于自己的某个属性,如,textblock的text绑定自己属性height

     <TextBlock Height="36" Background="Moccasin" Text="{Binding Path=Height,RelativeSource={RelativeSource Mode=Self}}"/>

     5.2 FindAncestor 

    绑定时,如果不知道数据源的名字,无法使用elementname,那么AncestorType可以指定从哪个控件类型找,或AncestorLevel从自己向上找父对象的层数,如果指定了AncestorType,那么AncestorLevel的层数会略过非AncestorType类型的控件

    <Border Name="Border1">
                <StackPanel Name="Stacpanel2">
                    <Border Name="Border2">
                    <StackPanel Name="Stacpanel1">
                    <Border Name="Border3">
                        <TextBlock Background="Red" Text="{Binding Path=Name ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Border,AncestorLevel=2}}"/>
                    </Border>
                    </StackPanel>
                </Border>
                </StackPanel>
            </Border>

     6.UpdateSourceTrigger 

    绑定的两端,一端发生变化,什么时候或者什么情况才触发另一端变化?

    4种情况:默认,属性一旦发生变化,控件失去焦点,显示(写代码手动触发)

     mode:两端数据变化,是单向还是双向,还是只触发一次

    7.静态对象怎么绑定?

    定义:

     绑定:

    <!--绑定静态变量-->
    <TextBlock Background="DarkKhaki" Text="{Binding (local:Class2.StaticValue)}"/>
  • 相关阅读:
    Git clone The requested URL returned error: 403 错误
    创建DOTA2本地数据库(一)
    如何打开VPK文件?里面究竟有什么?
    DOTA 2 API(个人资料)
    新的博客,新的开始!
    你应该在开始API开发之前知道的事(下)(翻译)
    你应该在开始API开发之前知道的事(上)(翻译)
    DOTA 2 Match History WebAPI(翻译)
    C#中UnixTime和DateTime的转换(转载)
    搜查令中期总结
  • 原文地址:https://www.cnblogs.com/1024E/p/15739559.html
Copyright © 2020-2023  润新知