WPF系列——簡單綁定學習


1. 綁定到元素對象.(實際項目中用處不大)

    界面上兩個關聯的控件之間綁定,比如一個TextBlock 的FontSize和一個Slider 的Value綁定:

<Slider Name="sliderFontText" Minimum="1" Maximum="100" Value="10"/>
        <TextBox Name="txtValue" Width="200" 
                 Text="{Binding  ElementName=sliderFontText, Path=Value,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>

Text的內容就是new了一個Binding對象,設置ElementName,Path等是綁定的屬性值.

    XAML對應的C#代碼:

Binding binding = new Binding();
binding.ElementName = "sliderFontText";
binding.Path = new PropertyPath("Value");
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
binding.Mode = BindingMode.TwoWay;
txtValue.SetBinding(TextBox.TextProperty, binding);

              刪除綁定:

BindingOperations.ClearBinding(txtValue, TextBox.TextProperty);

   綁定后屬性的操作,如刪除綁定,獲取控件綁定對象,都可以使用System.Windows.Data.BindingOperations的靜態方法.

   BandingModel枚舉值介紹:

名稱

說明

OneWay

源屬性 -> 目標屬性(源變化引發目標變化)

TwoWay

源屬性 <-> 目標屬性(源變化引發目標變化且目標變化也引發源變化)

OneTime

首次執行 源屬性 -> 目標屬性,后面所有變化忽略(除非顯示調用BindingExpress.UpdateTarget()或者重新綁定完全不同的對象

OneWayToSource

和OneTime綁定方式相反

Default

依賴綁定目標屬性

 

UpdateSourceTrigger枚舉值介紹:

名稱

說明

PropertyChanged

目標屬性變化 -> 立即更新源

LostFocus

目標屬性變化 + 目標失去焦點 -> 更新源

Explicit

調用BindingExpression.UpdateSource() -> 更新源

Default

大部分為PropertyChanged,Textbox.Text是LostFocus

2. 綁定非界面元素

    1.    綁定靜態類的靜態屬性(系統預定義和自定義方法一致,這里演示一個自定義):

           XAML(c是 命名空間WPFDemo的別名):

<Button Content="{Binding Source={x:Static c:MyRes.Name}}"/>

           C#: 

namespace WPFDemo
{
    public static class MyStaticRes
    {
        public static string Name { get { return "返回的Name"; } }
    }

}

2.綁定一般類的一般屬性

XAML:首先需要新建一個資源對象,

創建資源對象:

<Window.Resources>
    <c:MyRes x:Key="customRes" Name="自定義資源文本"></c:MyRes>
</Window.Resources>

XAML綁定:

<Button Content="{Binding Source={StaticResource customRes},Path=Name}"/>

C#:

namespace WPFDemo
{
    public class MyRes
    {
        public string Name { get; set; }
    }
}

3. 相對綁定

XAML(這里將StackPanel的Name綁定到Button的Content屬性中):

<StackPanel x:Name="LayoutRoot"> 
        <Button 
            Content="{Binding Path=Name, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type StackPanel}}}"/>
    </StackPanel>

RelativeSource 的Model枚舉值值:

名稱 說明
Self 綁定自己的另外一個屬性
FindAncestor 綁定到父元素,需要設置父元素類型AncestorType和父元素層次AncestorLevel(默認為1)
PreviousData 綁定到數據綁定列表的前一項
TemplateParent 綁定到應用模板的元素
     4.DataContext綁定
<Button Content="{Binding Path=Name}" DataContext="{Binding Source={StaticResource myRes}}"/>

或者

<StackPanel Name="MainLayout" DataContext="{Binding Source={StaticResource myRes}}">
        <Button Content="{Binding Path=Name}" />
    </StackPanel>
    Binding中屬性介紹

屬性

含義

ElementName

是指綁定的源元素(這里一般指界面元素)

Path

源元素的綁定關聯屬性

UpdateSourceTrigger

更新綁定屬性的時機

Model

更新綁定的方式

Source 提供數據的引用
RelativeSource 使用一個RelativeSource對象指向源對象,主要是相對數據源綁定使用
DataContext 最重要的綁定,沒有Source或者RelativeSource,WPF就按照元素樹向上查找DataContext屬性,並使用第一個非空的DataContext屬性

到這里,基本的Banding就復習完了,這里有一個體會就是,xaml有時候會忘記語法的寫法,其實XAML中也是由一個一個的對象組成,組成方式時New一個一個的對象,實例化方式時: {對象類 屬性1=XX, 屬性2=XX}.

本文Demo項目下載:http://files.cnblogs.com/files/zhaoxixi/WPFDemo.rar


免責聲明!

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



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