Binding在WPF中的使用
閑來無事,不想打DOTA,在這里小小研究下wpf中關于Binding的東西。
咯咯
在我們印象中,Binding的意思是“綁定”,這個“綁”大概取自于Bind這個單詞吧,這么理解的話就是以音譯英了,沒什么實際意義。
Bind這個單詞的動詞形式是Binding,看看字典就知道除了前面說的“捆綁”之外,還有“鍵聯(lián)”,“關聯(lián)”的意思。比如原子鍵聯(lián)(atomic binding),化學鍵聯(lián)(binding-beam)等。也就是說啦,Binding更注重于表達的是一種“關系”,而不是一個動作。如果把Binding比作數(shù)據(jù)的橋梁,那么它的兩端分別是Binding的源(Source)和目標(Target)。它描述了數(shù)據(jù)從哪來到哪去,一般情況下Binding的源是邏輯層的對象,目標是表現(xiàn)層(UI)的控件對象,我們不但可以控制源與目標之間雙向或者單向的道路,還可以控制對數(shù)據(jù)的放行機制。那么下面我來搞一個簡單的例子。
先做一個源數(shù)據(jù),一個來自于邏輯層的對象
class Student {private string name;public string Name{get{return name;}set{name = value;}} }屬性是有了,可是我的目標完全不知道當我的屬性發(fā)生變化時,源怎么通知我的目標,告訴它源數(shù)據(jù)變化了?所以,這樣一個簡單的類顯然不科學。完善一下它,讓它去繼承
System.ComponentModel下的INotifyPropertyChanged接口就行了那么完整的類應該是這個樣子
class Student:INotifyPropertyChanged {public event PropertyChangedEventHandler PropertyChanged;private string name;public string Name{get{return name;}set{name = value;//在set中激發(fā) PropertyChanged事件if(this.PropertyChanged!=null){this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));}}}}
看,當為Binding設置了數(shù)據(jù)源之后,它會自動監(jiān)聽來自PropertyChanged這個接口的事件,Name發(fā)生變化,觸發(fā)propertyChanged事件,Binding監(jiān)聽到了觸發(fā)的事件,它會告訴UI層的控件Name這個屬性的值發(fā)生變化,通知UI層控件顯示新的值。
有賣就有買,下面是它的目標控件
<Window x:Class="Binding1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><StackPanel><TextBox x:Name="txtBoxName" BorderBrush="Black" Margin="5"></TextBox><Button Content="AddAge" Margin="5" Click="Button_Click"></Button></StackPanel> </Window>寫了一個TextBox作為Binding的目標和一個按鈕Button來觸發(fā)改變Name值得事件。
然后就是介紹他們倆認識的時候了。。。
public partial class MainWindow : Window{Student stu;public MainWindow(){InitializeComponent();//準備數(shù)據(jù)源stu = new Student();//把stu.Name作為Binding的數(shù)據(jù)源Binding binding = new Binding();binding.Source = stu;binding.Path = new PropertyPath("Name");//使用Binding連接源和目標,把stu的Name屬性值聯(lián)系到一個叫做"txtBoxName"的TextBox上去BindingOperations.SetBinding(this.txtBoxName, TextBox.TextProperty, binding);}private void Button_Click(object sender, RoutedEventArgs e){stu.Name += "屎兔子";}}運行效果
當然,也可以把上面的代碼這么寫,借助Binding類構(gòu)造器和C#3.0的對象初始化語法來簡化代碼
public Window1() {InitializeComponent();this.txtBoxName.SetBinding(TextBox.TextProperty,new Binding("Name"){Source = stu = new Student()}); }
private void Button_Click(object sender, RoutedEventArgs e) {stu.Name += "屎兔子"; }
好了,一個簡單的例子寫到這里,明天繼續(xù)詳細學習。(下午下午媳婦一直問我那個瘋狂猜圖的答案,表示我也迷戀了,去玩會兒~)
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Mushrooms/p/3142559.html
總結(jié)
以上是生活随笔為你收集整理的Binding在WPF中的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特定视图呈现时发生的事件顺序
- 下一篇: asp.net ajax控件工具集 Au