日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Binding(一):数据绑定

發布時間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Binding(一):数据绑定 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 這節開始分幾期來講一下WPF中Binding的相關用法,本節主要講使用Binding進行數據綁定。

Binding的作用

????在WinForm中,我們要想對控件賦值,需要在后臺代碼中拿到控件對象進行操作,這種賦值形式,從根本上是無法實現界面與邏輯分離的。在WPF中,微軟引入了Binding對象,通過Binding,我們可以直接將控件與數據做綁定,在后臺不用拿到控件對象,直接操作數據源,系統會自動監聽數據源的變化實時的更新到控件上,相反的,用戶改變控件的值,也會實時更新到后臺數據源,這也就是我們之前所說的,WPF天生支持MVVM模式。

數據綁定

????下面將通過一個實例來講解如何使用Binding進行數據綁定,具體內容如下:

????點擊按鈕“展示數據”時,將數據顯示在上方文本框中。

????后臺代碼如下:

????我使用GetData方法模擬數據,返回1-10的隨機數,上圖所示的形式是使用控件對象直接賦值的方式。

????另外,您可能已經注意到了,我實現了一個System.ComponentModel命名空間下的INotifyPropertyChanged接口,這個接口是實現數據綁定后臺必須要繼承的接口,從它的字面意思我們也可以知道這個接口是用于通知屬性已經改變,這個接口內部有一個PropertyChanged的事件,我們需要在每個要綁定的屬性的set中調用它,就如上圖Data屬性中:

this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data"));

????這句代碼,它的意思就是通知系統,我的Data屬性改變了,系統收到這個通知,會及時找到跟這個屬性Binding的前臺控件及時的更新值,下面演示使用Binding進行數據綁定:

publicMainWindowBase() {InitializeComponent();Binding binding = new Binding();binding.Source = this;binding.Path = new PropertyPath("Data");BindingOperations.SetBinding(this.text_show, TextBox.TextProperty, binding); } private?void?Button_Click(object?sender,?RoutedEventArgs?e) {Data = GetData(); }

????我們需要在構造器中先設置綁定,新建Binding對象,設置它的源和路徑,意思就是去哪個地方找哪個屬性,最后通過BindingOperations.SetBinding這個方法將綁定設置到控件,這樣我在Button的事件處理器中只管對Data賦值,系統會自動更新到控件,這也是WPF中的數據驅動控件。

????另外,Binding對象還有個Mode屬性,它是BindingMode枚舉,枚舉內容如下圖:

??? OneWay:指示數據只從源到控件,用戶手動改變控件的值,系統不會更新到源,它跟OneWayToSource是相反的,后者是數據只從控件到源;

??? TwoWay:則是數據可以在控件和源雙方流通;

????Default:默認值,一般是TwoWay;

????OneTime:顧名思義,數據只會流通一次;

????SetBinding方法中有三個參數,第一個和最后一個參數是要綁定的控件對象和Bingding對象,第二個參數是控件對象的依賴屬性,指示綁定的數據要賦值給控件的哪個屬性,此處要說明一下,只有控件的依賴屬性才可以使用數據綁定,關于依賴屬性,會在后續的章節解釋。

????運行起來,點擊按鈕后,效果如下:

????在實際開發中,我們一般會將綁定的這塊代碼寫在通過XAML標記擴展的形式寫在Xaml頁面中,那么構造器中關于綁定的代碼就可以刪掉,改為如下代碼:

public?MainWindowBase() {InitializeComponent();this.DataContext = this;//Binding binding = new Binding();//binding.Source = this; //binding.Path = new PropertyPath("Data");//BindingOperations.SetBinding(this.text_show, TextBox.TextProperty, binding); } <TextBox?x:Name="text_show"?Text="{Binding?Path=Data}"?/>

??? 在前臺使用標記擴展綁定數據,需要后臺配置前臺的數據上下文,就是this.DataContext對象。

????標記擴展中,使用Binding命令指示數據綁定,Path屬性是默認值,可以省略,Source也可以省略,默認DataContext對象,這樣就極大的簡化了代碼。

????總結起來,使用Binding的流程是:

????????1.實現INotifyPropertyChanged接口

????????2.為需要綁定的屬性的set塊添加PropertyChanged事件通知

????????3.在構造器(不一定是構造器,可以是任何一個早于您使用數據綁定情景之前的方法中)中綁定數據源 或者?使用XAMl的標記擴展綁定數據源

本節到此結束...

總結

以上是生活随笔為你收集整理的Binding(一):数据绑定的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。