国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

WPF基礎(chǔ)教程之元素綁定詳解

2020-01-24 00:11:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

前言

簡(jiǎn)單的說(shuō),數(shù)據(jù)綁定是一種關(guān)系,該關(guān)系告訴WPF從一個(gè)源對(duì)象提取一些信息,并使用這些信息設(shè)置目標(biāo)對(duì)象的屬性。目標(biāo)屬性總是以來(lái)屬性,并且通常位于WPF元素中,畢竟,WPF數(shù)據(jù)綁定的最終目的是在用戶界面中顯示一些信息。然而,源對(duì)象可以是任何內(nèi)容,從另一個(gè)WPF元素到ADO.NET數(shù)據(jù)對(duì)象(如DataTable和DataRow對(duì)象)或自己創(chuàng)建的純數(shù)據(jù)對(duì)象。

下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

元素綁定

數(shù)據(jù)綁定最簡(jiǎn)單的形式是源對(duì)象是WPF元素而且源屬性是依賴項(xiàng)屬性。依賴項(xiàng)屬性具有內(nèi)置的更改通知支持。因此當(dāng)源對(duì)象中改變依賴屬性的值時(shí),會(huì)立即更新目標(biāo)對(duì)象中的綁定屬性。

綁定表達(dá)式

當(dāng)使用綁定表達(dá)式時(shí),不必對(duì)源對(duì)象做任何改動(dòng),只需配置源對(duì)象使其屬性具有正確的值范圍。

<Slider Grid.Row="0" Name="sliderFontSize" Margin="3" Minimum="1" Maximum="40" Value="10" TickFrequency="1" TickPlacement="TopLeft"> </Slider><TextBlock Grid.Row="1" Margin="10" Text="Simple Text" Name="lblSimpleText"FontSize="{Binding ElementName=sliderFontSize,Path=Value}">   </TextBlock>

綁定錯(cuò)誤

WPF不會(huì)引發(fā)異常來(lái)通知與數(shù)據(jù)綁定相關(guān)的問(wèn)題。如果指定的元素或?qū)傩圆淮嬖冢敲床粫?huì)收到任何的指示;相反,只是不能在目標(biāo)屬性中顯示數(shù)據(jù)。

調(diào)試可通過(guò)Visual Studio的OutPut窗口查看,WPF會(huì)輸出綁定細(xì)節(jié)的跟蹤信息。

綁定模式

名稱 說(shuō)明
OneWay 當(dāng)源屬性變化時(shí)更新目標(biāo)屬性。
TwoWay 當(dāng)源屬性變化時(shí)更新目標(biāo)屬性,并且當(dāng)目標(biāo)屬性變化時(shí)更新源屬性。
OneTime 最初根據(jù)源屬性設(shè)置目標(biāo)屬性,然而,其后的所有改變都會(huì)被忽略。通常如果知道屬性不會(huì)變化,可通過(guò)這種模式降低開(kāi)銷。
OneWayToSource 與OneWay相反,當(dāng)目標(biāo)屬性變化時(shí)更新源屬性。
Default 此類綁定依賴于目標(biāo)屬性,既可以是雙向的,也可以是單向的。除非明確指定了一種綁定模式,否則所有綁定使用該方法

使用代碼創(chuàng)建綁定

Binding binding = new Binding();binding.Source = sliderFontSize;binding.Path = new PropertyPath("Value");binding.Mode = BindingMode.TwoWay;lblSimpleText.SetBinding(TextBlock.FontSizeProperty,binding);

多綁定

可以設(shè)置TextBlock元素從文本框中獲取文本,從單獨(dú)的顏色列表中選擇當(dāng)前前景色和背景色,等等。

  <TextBlock Grid.Row="1" Margin="10" Name="lblSimpleText"     FontSize="{Binding ElementName=sliderFontSize,Path=Value}"     Text="{Binding ElementName=txtContent,Path=Text}"     Foreground="{Binding ElementName=lstColors,Path=SelectedItem.Tag}">   </TextBlock>

還可鏈接數(shù)據(jù)綁定。例如TextBox.Text屬性創(chuàng)建表達(dá)式以鏈接到TextBlock.FontSize屬性,而TextBlock.FontSize又鏈接到Slider.Value屬性的綁定表達(dá)式。

綁定更新

源的變化會(huì)立即影響目標(biāo),然而反向的傳遞從目標(biāo)到源未必會(huì)立即發(fā)生。他們的行為由Binding.UpdateSourceTrigger屬性控制。


名稱
說(shuō)明
PropertyChanged 當(dāng)目標(biāo)屬性變化時(shí)立即更新源。
LostFocus 當(dāng)目標(biāo)屬性變化并且目標(biāo)屬性失去焦點(diǎn)時(shí)跟新源。
Explicit 除非調(diào)用BindingExpression.UpdateSource()方法,否則無(wú)法更新源。
Default 根據(jù)目標(biāo)屬性的元素確定更新行為。大多數(shù)屬性的默認(rèn)行為是PropertyChanged,但TextBox.Text屬性的默認(rèn)行為是LostFocus

表中列出的值不影響目標(biāo)的更新方式,他們僅控制OneWay或OneWayToSource模式的綁定中源的更新方式。

綁定延遲

用戶停止輸入500毫秒后更新源對(duì)象

<TextBox Text="{Binding ElementName=txtSampleText,Path=FontSize,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,Delay=500}" Name="txtFontSize"></TextBox>

綁定到非元素對(duì)象

WPF數(shù)據(jù)綁定基礎(chǔ)結(jié)構(gòu)不能獲取私有信息或公有字段,必須是公有屬性中。

綁定到非元素對(duì)象時(shí),需要放棄Binding.ElementName屬性,并使用以下屬性之一。

  • Source:該屬性是指向源對(duì)象的引用,提供數(shù)據(jù)的對(duì)象。
  • RelativeSource:這是引用,使用RelativeSource對(duì)象指向源對(duì)象。有了這個(gè)附加層,在在當(dāng)前元素的基礎(chǔ)上構(gòu)建引用。這似乎增加了復(fù)雜程度,

但實(shí)際上RelativeSource屬性是一種特殊工具,當(dāng)編寫(xiě)控件模版及數(shù)據(jù)模版時(shí)是很方便的。

  • DataContext:如果沒(méi)有使用Source或RelativeSource屬性指定源,WPF就從當(dāng)前元素開(kāi)始在元素樹(shù)中向上查找。檢查每個(gè)屬性的DataContext屬性,并使用第一個(gè)飛空的DataContext屬性。

當(dāng)將同一個(gè)對(duì)象的多個(gè)屬性綁定到不同的元素時(shí),DataContext屬性是非常有用的,因?yàn)榭稍诟邔哟蔚娜萜鲗?duì)象上,設(shè)置DataContext屬性。

Source

綁定到靜態(tài)對(duì)象

 <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

2.綁定到資源

 <Window.Resources>  <FontFamily x:Key="CoustomFont">Calibri</FontFamily> </Window.Resources> <Grid>  <TextBlock Text="{Binding Source={StaticResource CoustomFont},Path=Source}"></TextBlock> </Grid>

RelativeSource

<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}}"></TextBlock>

RelativeSource對(duì)象使用FindAncestor模式,該模式告知查找元素樹(shù)知道發(fā)現(xiàn)AncestorType屬性定義的元素類型。
FindAncestor模式有4種。

名稱                 
說(shuō)明
Self 表達(dá)式綁定到同一元素的另一個(gè)屬性上。
FindAncestor 表達(dá)式綁定到父元素。WPF將查找元素樹(shù)直至發(fā)現(xiàn)期望的父元素。為了指定父元素,還必須設(shè)置AncestorType屬性以指示希望查找的父元素類型。此外,還可以用AncestorLevel屬性略過(guò)發(fā)現(xiàn)的一定的數(shù)量的特定元素。例如當(dāng)一棵樹(shù)中查找時(shí),如果希望綁定到第三個(gè)ListBoxItem類型的元素,應(yīng)當(dāng)使用如下設(shè)置,AncestorType={x:Type ListBoxItem};并且AncestorLevel=3,從而略過(guò)前連個(gè)ListBoxItem元素。默認(rèn)值是1,并在找到第一個(gè)匹配的元素停止查找。
PreviousData 表達(dá)式綁定到數(shù)據(jù)綁定列表中前一個(gè)數(shù)據(jù)項(xiàng)。在列表中使用這種模式。
TemplateParent 表達(dá)式綁定到應(yīng)用模版的元素。只有當(dāng)綁定位于控件模版或數(shù)據(jù)模版內(nèi)部時(shí),這種模式才能工作。

DataContext屬性

大量元素綁定到同一對(duì)象。

<TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock> <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock> <TextBlock Text="{Binding Source={x:Static SystemFonts.IconFontFamily},Path=Source}"></TextBlock>

可以改成如下

<StackPanel DataContext="x:Static SystemFonts.IconFontFamily">  <TextBlock Text="{Binding Path=Source}"></TextBlock>  <TextBlock Text="{Binding Path=Source}"></TextBlock>  <TextBlock Text="{Binding Path=Source}"></TextBlock> </StackPanel>

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三台县| 遵化市| 会宁县| 古蔺县| 鄯善县| 上杭县| 论坛| 淄博市| 昭苏县| 辽阳市| 图们市| 乌拉特中旗| 乌恰县| 东丰县| 秀山| 古蔺县| 禄劝| 甘孜| 柳州市| 大同县| 清涧县| 赤壁市| 和顺县| 虞城县| 长宁县| 新河县| 三河市| 秦安县| 紫金县| 邹平县| 万宁市| 瓮安县| 韶山市| 德清县| 高台县| 夏河县| 营口市| 伊通| 新乐市| 翼城县| 钟山县|