WPF 10天修煉 第十天- WPF數據綁定

WPF數據綁定express

數據綁定到元素屬性是將源對象指定爲一個WPF元素,而且源屬性是一個依賴屬性,依賴屬性內置了變動通知。當改變源對象依賴屬性值以後,綁定目標能夠當即獲得更新,開發人員不須要手動編寫響應事件。 ide

在綁定來源和綁定目標之間,可使用Mode屬性指定綁定的方法。Mode屬性是System.Windows.Data.BindMode枚舉類型的屬性:學習

OneWay:源數據變動目標數據變動,反之不行字體

OneTime:僅在啓動時更新spa

OneWayToSource:目標數據更新源數據更新,反之不行orm

TwoWay:源數據變動目標數據變動,反之能夠 xml

若是使用TwoWay綁定模式,當目標文本框對象發生變動時,變化不會當即被傳到數據源,除非用戶使當前控件失去焦點以後,不然源數據不會發生變動。能夠經過設置Binding.UpdateSourceTrigger屬性設置更新方式:對象

Default:綁定目標屬性的默認UpdateSourceTrigger值。多數依賴項屬性默認值爲PropertyChanged,而Text屬性則爲LostFocus。這就是爲何文本框對象須要失去焦點才能夠變動原數據。blog

ProertyChannged:當綁定目標屬性更改時,當即更新綁定源。事件

LostFocus:當綁定目標元素失去焦點時,更新綁定源。

Explicit:僅在調用UpdateSource()方法時更新綁定數據源。 

綁定元素屬性 

<Window x:Class="WPFDemo.BindElementsDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFDemo"
        mc:Ignorable="d"
        Title="BindElementsDemo" Height="300" Width="300">
    <Window.Resources>
        <Style TargetType="TextBox">
            <Setter Property="Width" Value="200" />
            <Setter Property="Height" Value="20" />
            <Setter Property="Margin" Value="5" />
        </Style>
    </Window.Resources>
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition /> <RowDefinition />
            <RowDefinition /> <RowDefinition />
            <RowDefinition /> <RowDefinition />
            <RowDefinition /> <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Grid.Row="0" Margin="5" Content="源數據" />
        <Label Grid.Column="1" Grid.Row="0" Margin="5" Content="目標數據" />
        <!--使用OneWay綁定模式 源數據變動目標數據變動,反之不行-->
        <Label Grid.Row="1" Grid.Column="0" Content="OneWay Mode"></Label>
        <TextBox Grid.Row="1" Grid.Column="0" Name="txt1"></TextBox>
        <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding ElementName=txt1,Path=Text,Mode=OneWay}"></TextBox>
         <!--使用OneTime綁定模式 僅在啓動時更新-->
        <Label Grid.Row="2" Grid.Column="0" Content="OneTime Mode"></Label>
        <TextBox Grid.Row="2" Grid.Column="0" Name="txt3"></TextBox>
        <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding ElementName=txt3,Path=Text,Mode=OneTime}"></TextBox>
 
        <!--使用OneWayToSource綁定模式 目標數據更新源數據更新,反之不行-->
        <Label Grid.Row="3" Grid.Column="0" Content="OneWayToSource Mode"></Label>
        <TextBox Grid.Row="3" Grid.Column="0" Name="txt4"></TextBox>
        <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding ElementName=txt4,Path=Text,Mode=OneWayToSource}"></TextBox>
 
        <!--使用TwoWay綁定模式 源數據變動目標數據變動,反之能夠-->
        <Label Grid.Row="4" Grid.Column="0" Content="TwoWay Modem默認"></Label>
        <TextBox Grid.Row="4" Grid.Column="0" Name="txt2"></TextBox>
        <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding ElementName=txt2,Path=Text,Mode=TwoWay}"></TextBox>
 
        <!--使用TwoWay綁定模式調用UpdateSource時更新 源數據變動目標數據變動,反之能夠-->
        <Label Grid.Row="5" Grid.Column="0" Content="TwoWay Modem 目標數據更改Explicit調用UpdateSource時更新"></Label>
        <TextBox Grid.Row="5" Grid.Column="0" Name="txt5"></TextBox>
        <TextBox Grid.Row="5" Grid.Column="1" Text="{Binding ElementName=txt5,Path=Text,Mode=TwoWay,UpdateSourceTrigger=Explicit}"></TextBox>
 
        <!--使用TwoWay綁定模式失去焦點更新 源數據變動目標數據變動,反之能夠-->
        <Label Grid.Row="6" Grid.Column="0" Content="TwoWay Modem 目標數據更改失去焦點時更新"></Label>
        <TextBox Grid.Row="6" Grid.Column="0" Name="txt6"></TextBox>
        <TextBox Grid.Row="6" Grid.Column="1" Text="{Binding ElementName=txt6,Path=Text,Mode=TwoWay,UpdateSourceTrigger=LostFocus}"></TextBox>

       <!--使用TwoWay綁定模式當即更新 源數據變動目標數據變動,反之能夠-->
        <Label Grid.Row="7" Grid.Column="0" Content="TwoWay Modem 目標數據更改當即更新"></Label>
        <TextBox Grid.Row="7" Grid.Column="0" Name="txt7"></TextBox>
        <TextBox Grid.Row="7" Grid.Column="1" Text="{Binding ElementName=txt7,Path=Text,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>

    </Grid>
</Window>

綁定元素多個屬性

<Window x:Class="WPFDemo.BindElemntsMulPropertyDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFDemo"
        mc:Ignorable="d"
        Title="BindElemntsMulPropertyDemo" Height="300" Width="500">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <!--Slider設置字體大小-->
        <Label  Grid.Row="0" Grid.Column="0" Content="字體大小" />
        <Slider Grid.Row="0" Grid.Column="1"  Name="sliderFontSize" Margin="5" Minimum="8" Maximum="20" Value="10"/>
        <!--設置文本內容-->
        <Label   Grid.Column="0" Grid.Row="1" Content="文本內容" />
        <TextBox Grid.Column="1" Margin="5" Grid.Row="1" Name="txtContent"  Text="綁定多個屬性值"/>
        <!--設置字體顏色-->
        <Label   Grid.Column="0" Grid.Row="2" Content="字體顏色" />
        <ListBox Grid.Column="1" Grid.Row="2" Margin="5" Name="FontColor">
            <ListBoxItem Tag="Blue">Blue</ListBoxItem>
            <ListBoxItem Tag="Red">Red</ListBoxItem>
            <ListBoxItem Tag="Yellow">Yellow</ListBoxItem>
        </ListBox>
 
        <TextBlock   Grid.Column="0" Grid.ColumnSpan="2" Margin="5" Grid.Row="3"  FontSize="{Binding ElementName=sliderFontSize,Path=Value}"
                   Text="{Binding ElementName=txtContent,Path=Text}"
                   Foreground="{Binding ElementName=FontColor,Path=SelectedItem.Tag}">
        </TextBlock>
    </Grid>
</Window>

 

總結:陸陸續續將十天的「修煉」成果發佈出來;說是十天修煉,實際從發佈第一篇筆記開始到如今已經28天了4周整。時光匆匆,這些內容一共看了兩遍,第一次只是看了一遍沒有什麼印象,第二次將全部的代碼都敲了一遍,收穫頗豐。筆記不只能夠方便之後進行查漏補缺,通過時間的沉澱還能夠總結出本身的一套學習方法。再接再礪。

Stay Hungry Stay Foolish !  

求知若飢 虛心若愚!

相關文章
相關標籤/搜索