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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Binding(二):控件关联和代码提升

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Binding(二):控件关联和代码提升 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????上節我們講到,使用Binding,我們可以關聯后臺代碼中的屬性,在某些情況下,我們可能需要將兩個控件關聯起來,借助Binding,我們也可以輕松的實現。

關聯控件

????設想這樣一個場景,界面中有個CheckBox,和一個Button,只有當CheckBox被選中的時候,Button才可用或者顯示,如果按照常規的做法,那應該是借助CheckBox的Click事件去手動控制Button的顯示等等,但我們如果使用Binding,則會簡單很多,請看如下代碼:

??? Binding有個ElementName的屬性,是專門用于跟控件做綁定的,把某個控件的名字賦給它,系統會自動去這個控件上找Path指定的屬性,CheckBox的IsChecked屬性用來指示是否被選中, 將其綁定到Button的IsEnabled屬性上,就可以實現兩者的聯動。

????第二個Button則是使用Source的形式,借助x命名空間的Reference指令,拿到名稱為CB的控件引用,將其作為源,效果是一樣的。

????其對應的后臺代碼為(部分):

Binding binding = new Binding(); binding.Source?=?CB;?//控件引用 binding.ElementName?=?"CB";?//控件名

????運行效果如下:

????當然,這是在兩個控件綁定的屬性類型都一致的情況下,如果不一致呢?比如說上述情景中讓Button顯示和隱藏,顯然bool是不能轉換為Visibility枚舉的,這就需要用到數據轉換器了,我們下節再講,它主要還涉及到XAML資源的知識,適合單獨拿一節出來。

代碼提升

????在不使用第三方框架的情況下,我一般會使用如下代碼來實現INotifyPropertyChanged接口:

public?class?NorifyBase:INotifyPropertyChanged {public event PropertyChangedEventHandler PropertyChanged;protected void RaisePropertyChanged([CallerMemberName] string propertyName = null){OnPropertyChanged(new PropertyChangedEventArgs(propertyName));}protected virtual void OnPropertyChanged(PropertyChangedEventArgs args){this.PropertyChanged?.Invoke(this, args);} }

????將其再封裝一層,并且放在一個類里邊作為父類,由子類去繼承,實現代碼復用。

????這樣原來set塊中的通知邏輯就改為了如下所示:

//舊代碼 this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Data")); //新代碼 this.RaisePropertyChanged();

????此處要解釋一下,CallerMemberName這個Attribute,它用來在運行時動態獲取調用者的名字,簡單來說就是在方法內調用它,它就獲取到方法的名賦給參數,在屬性塊中調用它,它就獲取到屬性名賦給參數,在類中就是類名。

本節到此結束...

總結

以上是生活随笔為你收集整理的Binding(二):控件关联和代码提升的全部內容,希望文章能夠幫你解決所遇到的問題。

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