深入淺出WPF之Binding的使用(一)

from: ??http://www.cnblogs.com/akwwl/p/3421005.html


在WPF中Binding可以比作數據的橋梁,橋梁的兩端分別是Binding的源(Source)和目標(Target)。

一般情況下,Binding源是邏輯層對象,Binding目標是UI層的控件對象;這樣,數據就會通過Binding送達UI層,被UI層展現。

?  首先我們創建一個名為Student的類,這個類的實例作為數據源在UI上顯示:  

復制代碼
    public class Student{private string name;public string Name{set { name = value; }get { return name; }}}
復制代碼

  Binding是一種自動機制,當值變化后屬性要有能力通知Binding,讓Binding把變化傳遞給UI元素。

怎樣才能讓一個屬性具備這種通知Binding值已經變化的能力呢?方法是在屬性的set語句中激發一個PropertyChanged事件。這個事件不需要我們自己聲明,我們要做的是讓作為數據源的類實現System.ComponentModel名稱空間中的INotifyPropertyChanged接口。當為Binding設置了數據源后,Binding就會自動偵聽來自這個接口的PropertyChanged事件。  

復制代碼
    public class Student:INotifyPropertyChanged{private string name;public string Name{set { name = value;NotifyPropertyChanged("Name");}get { return name; }}public event PropertyChangedEventHandler PropertyChanged;private void NotifyPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this,new PropertyChangedEventArgs(propertyName));}}}
復制代碼

  當Name屬性的值發生變化時PropertyChanged事件就會被激發,Binding接收到這個事件后發現事件的消息告訴它是名為Name的屬性發生了值得改變,于是就會通知Binding目標端的UI元素顯示新的值。

  XAML代碼:  

    <Grid><TextBox x:Name="Box" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,50,0,0"  Height="30" Width="200"/><Button Content="按鈕"  HorizontalAlignment="Left" VerticalAlignment="Top" Margin="120,150,0,0"  Height="30" Width="160" Click="Button_Click"/></Grid>

  C#代碼:  

復制代碼
public partial class MainWindow : Window{private Student student;public MainWindow(){InitializeComponent();student = new Student();Binding binding = new Binding();binding.Source = student;binding.Path = new PropertyPath("Name");BindingOperations.SetBinding(this.Box,TextBox.TextProperty,binding);}private void Button_Click(object sender, RoutedEventArgs e){student.Name = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");}}
復制代碼

  其中:Binding binding=new Binding()聲明Binding類型變量并創建實例,

然后使用binding.Source=student為Binding實例指定數據源,

最后使用binding.Path = new PropertyPath("Name")為Binding指定訪問路徑。

把數據源和目標連接在一起的任務是使用BindingOperations.SetBinding(this.Box,TextBox.TextProperty,binding)方法完成的。

  BindingOperations.SetBinding(this.Box, ? ?TextBox.TextProperty, ? ?binding)中的參數介紹:

  第一個參數主要是指定Binding的目標。

  第二個參數是用于為Binding指明將數據綁定到目標的那個屬性中去,一般都為目標的依賴屬性。

  第三個參數是指定那個Binding將數據源與目標關聯起來。

  上面的代碼還可以簡化如下:

        private void SetBinding(){student = new Student();this.Box.SetBinding(TextBox.TextProperty, new Binding("Name") { Source=student});}

?

  Binding模型如下:



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458553.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458553.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458553.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arm處理器中a5 a8 a9,v6 v7,arm7 arm9 arm11都是依據什么來分類的【轉】

轉自&#xff1a;http://blog.csdn.net/maochengtao/article/details/9951131ARM處理器發展這么多年&#xff0c;有很多架構&#xff0c;很多不同的內核 架構有armv1 v2 v3 v4 v5 v6 v7 內核太多了&#xff0c;比如armv1對應的是arm1&#xff0c;armv5對應的arm9&#xff0c;ar…

前端開發一些很有用的工具

apiview.com 接口規范管理平臺 restClient 谷歌瀏覽器接口測試工具 postman 接口測試工具 SSH Secure Shell Client 抓包工具 SSH SecureFile Transfer Client wireshark 抓包分析工具 Xshell linux遠程工具 Balsamiq Mockups 原型圖 visio 流程圖 xmind top圖 SourceCounter、…

所有的iPhone設備cell的寬度都是320,解決辦法是?

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.frameCGRectMake(0, 0, SW, 44); } return self; } 自己重設一下寬度就行了

深入淺出WPF之Binding的使用(二)

from: http://www.cnblogs.com/akwwl/p/3421250.html 在上一篇中介紹了Binding的基本綁定方法&#xff0c;這一篇中我們在深入的介紹Binding的其他用法。 Binding的源也就是數據的源頭&#xff0c;在日常的工作中&#xff0c;除了使用像上一篇中的Student對象作為數據源外&a…

iOS 推送

最近在研究ios的推送問題&#xff0c;遇到了一些問題&#xff0c;最終整理了一下。放在這里和大家分享APNS的推送機制首先我們看一下蘋果官方給出的對ios推送機制的解釋。如下圖 Provider就是我們自己程序的后臺服務器&#xff0c;APNS是Apple Push Notification Service的縮寫…

Bash判斷文件夾(目錄)是否存在

1 #!/bin/bash 2 if [ -d DirName ]; then 3 echo Dir exist 4 else 5 echo Dir not exist 6 fi 轉載于:https://www.cnblogs.com/imzye/p/5059031.html

iOS 加載本地html文件詳細操作

webView的加載&#xff0c;如果是純文本&#xff0c;有內部樣式的話&#xff0c;簡單的加載請求就可以了。如下: 這種加載簡單直接&#xff0c;易操作。 如果需要加載images&#xff0c;css文件 需要把xcode的項目請求路徑的位置告訴webView.代碼如下&#xff1a; 這樣html文件…

HDU 5573 Binary Tree 構造

Binary Tree題目連接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid5573 Description The Old Frog King lives on the root of an infinite tree. According to the law, each node should connect to exactly two nodes on the next level, forming a full binary…

志邦櫥柜坑爹,志邦櫥柜大忽悠,志邦櫥柜欺騙

本人實實在在經歷的&#xff0c;志邦櫥柜就是個大忽悠,志邦櫥柜沒誠信!! 志邦櫥柜先騙客戶下訂單,在預算時低開,到真正簽合同時&#xff0c;不僅僅尺寸坑你,一大堆增項都會出來,原本1.5w預算到最后簽合同總價到2.2w,簽合同增項高開最后志邦櫥柜總價超預算非常非常離譜&#xff…

多線程的那點兒事(之讀寫鎖)

在編寫多線程的時候&#xff0c;有一種情況是十分常見的。那就是&#xff0c;有些公共數據修改的機會比較少。相比較改寫&#xff0c;它們讀的機會反而高的多。通常而言&#xff0c;在讀的過程中&#xff0c;往往伴隨著查找的操作&#xff0c;中間耗時很長。給這種代碼段加鎖&a…

iOS獲取設備IP

獲取iOS設備IP wifi和流量環境下 在網上找的比較好的獲取ip的代碼 #include <ifaddrs.h> #include <arpa/inet.h> #include <net/if.h> #define IOS_CELLULAR "pdp_ip0" #define IOS_WIFI "en0" #define IOS_VPN …

一些不錯的網站

http://www.huxiu.com/虎嗅網&#xff0c;一個關注最新創業信息的網站http://36kr.com/創業天花板https://www.zhihu.com/與世界分享你的經驗http://www.mafengwo.cn/世界那么大&#xff0c;想去哪就去那http://www.mt-bbs.com/找到屬于自己的設計本http://www.guokr.com/科技有…

[原]詳解如何將cocos2dx項目編譯到Android平臺上的(方式一:Cywin+NDK)

鏈接地址&#xff1a;http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8閱讀578 評論0 前言&#xff1a;cocos2dx作為一個開源的移動2D游戲框架&#xff0c;其跨平臺的特性讓它備受開發公司的歡迎。這里我就不做概念性的解釋了&#xff0c;通過這篇文章你就會了解…

互斥鎖和讀寫鎖的區別

原文地址&#xff1a;http://blog.csdn.NET/u012884354/article/details/46691761 相交進程之間的關系主要有兩種&#xff0c;同步與互斥。 所謂互斥&#xff0c;是指散布在不同進程之間的若干程序片斷&#xff0c;當某個進程運行其中一個程序片段時&#xff0c;其它進程就不能…

JSP EL表達式使用

為什么80%的碼農都做不了架構師&#xff1f;>>> ##1.EL全名為Expression Language out.print(str) <%str%> ${str}例子&#xff1a; Hi! <%username%> 和 Hi! ${username}是一樣的 只要是支持servlet2.4/jsp2.0的Container就都可以在jsp網頁中直接使用e…

eclipse 中 Android sdk 無法更新的問題

誒&#xff0c;真是麻煩&#xff0c;想下個東西都下不了。我也好久沒折騰過這個了&#xff0c;在家的電腦是早就下載好了的&#xff0c;然后如今又須要下載一份。下不到。網上搜到了資料&#xff0c;記錄下來&#xff1a; 第一種方法:sdk manager - tools - option 選擇強制 xx…

iOS10 xcode8 分頁請求MJRefresh崩潰問題

MJRefresh出現崩潰現象 解決辦法&#xff1a;類庫增加判斷 if (range.location ! NSNotFound) { language [language substringToIndex:range.location]; }

網絡編程學習筆記一:Socket編程

from: http://blog.csdn.net/gneveek/article/details/8699198 “一切皆Socket&#xff01;” 話雖些許夸張&#xff0c;但是事實也是&#xff0c;現在的網絡編程幾乎都是用的socket。 ——有感于實際編程和開源項目研究。 我們深諳信息交流的價值&#xff0c;那網絡中進程之間…

JavaScript原生對象常用方法總結

這是4年前學習JavaScript基礎的學習筆記&#xff0c;當初是照著W3School教程學習的&#xff0c;4年恍然如云煙&#xff0c;仿佛還在昨天。現發布與此&#xff0c;留作紀念&#xff0c;紀念那段不悔的青蔥歲月。下面都是我學習W3C School教程中有關JavaScript寫的學習筆記&#…

[delphi]修改indy源碼后重新編譯

http://blog.csdn.net/nerdy/article/details/8702568 雖然indy有一身的毛病&#xff0c;但是一般情況下使用起來還是多方便的。 今天在做一個使用到indy的程序的時候&#xff0c;發現無論你怎么修改idhttp.request.accept-encoding&#xff0c;他都會在其后添加一個值 identit…