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 !
求知若飢 虛心若愚!