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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM