
1.数据绑定1.1我先创建一个类等下暴露Name属性需要继承一个接口接口实现了一个事件我们在set的时候触发这个事件这样就可以通知ui那边进行数据变更了。publicclassStudent:INotifyPropertyChanged{privatestring_name;publiceventPropertyChangedEventHandlerPropertyChanged;publicstringName{get{return_name;}set{_namevalue;if(this.PropertyChanged!null){this.PropertyChanged.Invoke(this,newPropertyChangedEventArgs(Name));}}1.2 然后再xmal里给textbox取个名字TextBoxx:NameMyTextBoxWidth60Height30/TextBox1.3最后在main.cs里,新建_student这个类作为数据源然后新建绑定类先绑定数据源_student再绑定这个类里的Name属性最后操作要绑定的目标对象this.TextBox,以及它的属性Text最后就是绑定的源对象bingding。publicpartialclassMainWindow:Window{privateStudent_studentnewStudent{Name张三};publicMainWindow(){InitializeComponent();//this.DataContext _student;BindingbindingnewBinding();binding.Source_student;binding.PathnewPropertyPath(Name);BindingOperations.SetBinding(this.MyTextBox,TextBox.TextProperty,binding);}privatevoidButton_Click(objectsender,RoutedEventArgse){_student.Name李四;}}1.4 总结这样就实现了手动绑定数据2.绑定的源和数据一般绑定数据需要指定被绑定的是什么元素也就是path还有被绑定的对象也就是sourse例如textBox1.SetBinding(Text.TextProperty,new Binding(“/”){Sourcestrings ,ModeBindingMode.OneWay});某个控件.SetBinding需要绑定的是控件的什么属性new Bindingxxx一个string类型的字符串表示Path也就是绑定的属性{初始化Source和Mode分别指定绑定的源和传输方式}对应Xaml里 Text “{binding PathTextBox,text ElementNametextbox1 UpdateSourceTriggerxxx}”2.1控件和控件的绑定xaml里除了绑定后台的数据也可以控件绑定控件的数据用的格式依旧是{binding pathxxx elementNamexxx UpdateSourceTriggerxxx} 相当于 this.textbox1.SetBinding(TextBox.TextProperty, new Binding(“Value”) { Source “slider1” });StackPanelTextBoxx:Nametextbox1Width100Text{Binding PathValue, ElementNameslider1, UpdateSourceTriggerLostFocus}/TextBoxSliderx:Nameslider1Width100Maximum100Minimum0/Slider/StackPanel2.2控件绑定也有方向比如两个TextBox第二个的Text“{Binding PathText.length ElementNametextBox1,ModeOneWay }”所以Path后面加属性的名字ElementName后面加要绑定的源。StackPanelTextBoxx:NametextBox1Width100/TextBoxTextBoxx:NametextBox2Width100Text{Binding PathText.Length, ElementNametextBox1,ModeOneWay}/TextBox/StackPanel2.3 还可以指定Path里数据的索引Text“{binding PathText[3] ElementNametextBox1modeoneway }”StackPanelTextBoxx:NametextBox1Text123456Width100/TextBoxTextBoxx:NametextBox2Width100Text{Binding PathText[3], ElementNametextBox1,ModeOneWay}/TextBox/StackPanel2.4还可以绑定一个集合publicListstringstringsnewListstring(){TOM,TIM,LIU};publicMainWindow(){InitializeComponent();txtbox1.SetBinding(TextBox.TextProperty,newBinding(/){Sourcestrings});txtbox2.SetBinding(TextBox.TextProperty,newBinding(/Length){Sourcestrings,ModeBindingMode.OneWay});txtbox3.SetBinding(TextBox.TextProperty,newBinding(/[2]){Sourcestrings,ModeBindingMode.OneWay});}如果写成XAML可以Window.Resourcesx:Arrayx:KeystringsType{x:Type sys:String}sys:StringTOM/sys:Stringsys:StringTIM/sys:Stringsys:StringLIU/sys:String/x:Array/Window.ResourcesStackPanelTextBoxx:Nametxtbox1Text{Binding Path/, Source{StaticResource strings}}/TextBoxx:Nametxtbox2Text{Binding Path/Length, Source{StaticResource strings}, ModeOneWay}/TextBoxx:Nametxtbox3Text{Binding Path/[2], Source{StaticResource strings}, ModeOneWay}//StackPanel/WindowPS:2.5还可以path不写或者写个.StackPanelTextBoxText{Binding Path.,Source{x:Static local:MainWindow.strings},ModeOneWay}/TextBox/StackPanel