欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

WPF綁定Binding用法

 更新時(shí)間:2022年01月27日 11:06:21   作者:痕跡g  
這篇文章介紹了WPF綁定Binding用法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

什么是綁定(Binding)?

在winform中, 我們常常會(huì)用到各種類型的賦值, 例如:

  • button1.Text="Hello";
  • label.Text="Hello";
  • ...

類似這種賦值操作, 我們之所以不稱之為綁定, 主要原因是因?yàn)樗麄兇蠖鄶?shù)操作都是一次性的, 無(wú)論是數(shù)據(jù)還是按鈕本身發(fā)生變化,對(duì)兩者而言都是不可見(jiàn)的。

而綁定的概念則側(cè)重于: 兩者的關(guān)聯(lián),協(xié)議與兩者之間的影響。

首先, 從一個(gè)簡(jiǎn)單的例子來(lái)理解什么是綁定。

創(chuàng)建一個(gè)滑塊控件, 并且希望在滑動(dòng)的過(guò)程中, 把值更新到另外一個(gè)靜態(tài)文本上。代碼如下:

在winform中, 我們常規(guī)的做法會(huì)給滑塊創(chuàng)建一個(gè)值改變事件,同時(shí)將滑塊的值賦值給文本。

接下來(lái), 我只需要在靜態(tài)文本中添加一小段綁定的聲明,即可完整原本很復(fù)雜的操作:

Text={Binding ElementName=slider,Path=Value}

  • {Binding }: Binding的聲明語(yǔ)法, 一對(duì)尖括號(hào),開(kāi)頭聲明以Binding 開(kāi)始。
  • ElementName= : 該聲明意為, 設(shè)置元素的名稱
  • Path: 設(shè)置關(guān)聯(lián)元素的位置,上例中設(shè)置為元素的value屬性。

那么該如何理解整句話的意義, 翻譯: 靜態(tài)文本TextBlock的Text屬性將通過(guò)綁定的方式關(guān)聯(lián)到元素名'slider'的value屬性上。

效果圖所示:

可以看到,在滑塊不斷的滑動(dòng)過(guò)程中, TextBlock也在不斷的發(fā)生變化, 說(shuō)明TextBlock已經(jīng)得到了滑動(dòng)滑動(dòng)過(guò)程中的值變化, 這種關(guān)聯(lián), 我們稱之為綁定, 在WPF當(dāng)中, 綁定又分很多種, 而上面這種則是通過(guò)元素綁定的方式。

理解了基礎(chǔ)的綁定之后,然后就是理解綁定的模式。

綁定的模式就類似我們商業(yè)中的合作, 是一次性回報(bào)還是持續(xù)獲益, 是否可以單方面終止, 是否具有投票權(quán)等, 在WPF中綁定的模式又分為五種:

  • OneWay(單向綁定) : 當(dāng)源屬性發(fā)生變化更新目標(biāo)屬性, 類似上面的例子中, 滑動(dòng)變化更新文本的數(shù)據(jù)。示例:

效果:

  • TwoWay(雙向綁定) : 當(dāng)源屬性發(fā)生變化更新目標(biāo)屬性, 目標(biāo)屬性發(fā)生變化也更新源屬性。

與單向綁定的區(qū)別可以理解為, 前者只能打你,被打者不能還手, 雙向綁定的意思則是: 你敢打我一巴掌,我也能回你一巴掌。示例:

效果:

  • OneTime(單次模式) : 根據(jù)第一次源屬性設(shè)置目標(biāo)屬性, 在此之后所有改變都無(wú)效。

如第一次綁定了數(shù)據(jù)源為0, 那么無(wú)論后面如何改變 2、3、4... 都無(wú)法更新到目標(biāo)屬性上。示例:

效果:

  • OneWayToSource : 和OneWay類型, 只不過(guò)整個(gè)過(guò)程倒置。示例:

效果:

  • Default : 既可以是雙向,也可以是單項(xiàng), 除非明確表明某種模式, 否則采用該默認(rèn)綁定

綁定到非元素上

上面的代碼中,使用的綁定方式是根據(jù)元素的方式: ElementName=xxx, 如需綁定到一個(gè)非元素的對(duì)象, 則有一下幾屬性:

  • Source : 指向一個(gè)數(shù)據(jù)源, 示例, TextBox使用綁定的方式用Source指向一個(gè)靜態(tài)資源ABC:

  • RelativeSource : 使用一個(gè)名為RelativeSource的對(duì)象來(lái)根據(jù)不同的模式查找源對(duì)象,

示例, 使用RelativeSource的FindAncestor模式, 查找父元素為StackPanel的Width值

  • DataContext: 從當(dāng)前的元素樹(shù)向上查找到第一個(gè)非空的DataContext屬性為源對(duì)象。

示例, 該示例用后臺(tái)代碼創(chuàng)建一個(gè)只包含Name的類, Test, 通過(guò)綁定窗口的DataContext上下文:

后臺(tái)代碼綁定簡(jiǎn)單文本與列表

創(chuàng)建一個(gè)PageModel類, 定一個(gè)ClassName為班級(jí)名稱, 和一個(gè)Students學(xué)生列表, 后臺(tái)代碼:

窗口代碼

效果預(yù)覽

關(guān)于以上, 基本介紹了WPF元素綁定的方式與幾種模式, 接下講的是, WPF中的事件如果通過(guò)綁定的方式和UI分離。盡管WPF中仍然可以兼容winform中的事件模型, 而binding也是MVVM架構(gòu)中的重要組成部分(下節(jié)會(huì)介紹)。

到此這篇關(guān)于WPF綁定Binding用法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#編碼好習(xí)慣小結(jié)

    C#編碼好習(xí)慣小結(jié)

    c#編寫(xiě)比較好的習(xí)慣
    2008-04-04
  • asp.net FindControl方法誤區(qū)和解析

    asp.net FindControl方法誤區(qū)和解析

    在ASP.NET中Control都有一個(gè)FindControl方法,其作用是根據(jù)ID(注意既不是UniqueID也不是ClientID)在Control所在的命名容器中尋找相應(yīng)控件,但實(shí)際使用中存在很多誤區(qū)和陷阱,下面談?wù)剛€(gè)人對(duì)此的理解
    2012-01-01
  • 使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面

    使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面

    這篇文章介紹了使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • c#對(duì)xml的簡(jiǎn)單操作

    c#對(duì)xml的簡(jiǎn)單操作

    c#對(duì)xml的簡(jiǎn)單操作...
    2006-08-08
  • asp.net實(shí)例代碼protected override void Render(HtmlTextWriter writer)

    asp.net實(shí)例代碼protected override void Render(HtmlTextWriter wri

    把最終要輸出的html壓縮后再輸出和最終輸出前先存為html文件,如果發(fā)布最新信息了,可以打開(kāi)一次default.aspx,然后他又會(huì)生成一次html
    2008-08-08
  • 利用C#遠(yuǎn)程存取Access數(shù)據(jù)庫(kù)

    利用C#遠(yuǎn)程存取Access數(shù)據(jù)庫(kù)

    目前,基于數(shù)據(jù)庫(kù)服務(wù)器的桌面管理程序和Web程序已經(jīng)有太多的應(yīng)用了,尤其是網(wǎng)絡(luò)的大量普及,孤立地?cái)?shù)據(jù)庫(kù)管理系統(tǒng)無(wú)法勝任分布式管理應(yīng)用,但是面對(duì)基于Access數(shù)據(jù)庫(kù)的現(xiàn)有的桌面應(yīng)用我們也無(wú)法完全的摒棄。我們利用.Net 遠(yuǎn)程處理功能將連接和存取Access的行為封裝為一個(gè)遠(yuǎn)程對(duì)象,供網(wǎng)絡(luò)中其它客戶端通過(guò)調(diào)用該遠(yuǎn)程對(duì)象來(lái)存取實(shí)際的Access數(shù)據(jù)庫(kù)。我們以 C# 2005 為開(kāi)發(fā)語(yǔ)言來(lái)實(shí)現(xiàn)上述功能。
    2008-04-04
  • ASP.NET?Core開(kāi)發(fā)環(huán)境安裝配置

    ASP.NET?Core開(kāi)發(fā)環(huán)境安裝配置

    這篇文章介紹了ASP.NET?Core開(kāi)發(fā)環(huán)境安裝配置,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • Asp.net請(qǐng)求處理之管道處理介紹

    Asp.net請(qǐng)求處理之管道處理介紹

    在了解Asp.net請(qǐng)求處理流程的過(guò)程中,個(gè)人認(rèn)為有必要從源代碼的角度來(lái)了解asp.net管道是怎么實(shí)現(xiàn)的,需要的朋友可以參考下
    2012-11-11
  • Blazor框架簡(jiǎn)介

    Blazor框架簡(jiǎn)介

    Blazor是微軟推出的基于.net平臺(tái)以及http://ASP.net?core技術(shù)的?交互式客戶Web?UI框架。這篇文章為大家簡(jiǎn)單介紹了Blazor框架,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • ASP.NET?Core快速入門(mén)教程

    ASP.NET?Core快速入門(mén)教程

    這篇文章介紹了ASP.NET?Core快速入門(mén)教程,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評(píng)論