WPF学习历程2----Binding(一)
2012-03-04 22:07
232 查看
Binding基础
Eg1让数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口,当Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件
xaml代码:
C#代码:
其中代码可以简写,TextBox这类UI元素的基类FrameworkElement对BindingOperations.SetBinding(……)方法进行了封装,封装的结果也叫SetBinding
C#代码:
建立模型
Binding的源与路径
方法一:
方法二:
C#代码
或者
Binding多路径
或者
当使用一个集合或者Dadaview作为Binding源时
“没有Path”的Binding
或者
Eg1让数据源的类实现System.ComponentModel名称空间中的INotifyPropertyChanged接口,当Binding设置了数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件
xaml代码:
<StackPanel> <TextBox x:Name="txt_Name" BorderBrush="Blue" Margin="5"></TextBox> <Button Content="增加" Margin="5" Click="Button_Click"></Button> </StackPanel>
C#代码:
public partial class MainWindow : Window { Student stu; public MainWindow() { InitializeComponent(); stu = new Student(); Binding binding= new Binding(); binding.Source = stu; binding.Path = new PropertyPath("Name"); BindingOperations.SetBinding(this.txt_Name, TextBox.TextProperty, binding); } public void Button_Click(object sender, RoutedEventArgs e) { stu.Name += "Name"; } } class Student : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public string name; public string Name { get { return name; } set { name = value; if (this.PropertyChanged != null) { this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Name")); } } } }
其中代码可以简写,TextBox这类UI元素的基类FrameworkElement对BindingOperations.SetBinding(……)方法进行了封装,封装的结果也叫SetBinding
C#代码:
public partial class MainWindow : Window { Student stu; public MainWindow() { InitializeComponent(); this.txt_Name.SetBinding(TextBox.TextProperty, new Binding("Name") { Source = stu = new Student() }); } public void Button_Click(object sender, RoutedEventArgs e) { stu.Name += "Name"; } }
建立模型
Binding的源与路径
方法一:
<StackPanel> <TextBox x:Name="txt_Name" Text="{ Binding Path=Value, ElementName=slider1}" BorderBrush="Blue" Margin="5"></TextBox> <Slider x:Name="slider1" Maximum="100" Minimum="0" Margin="5"></Slider> </StackPanel>
方法二:
C#代码
Binding binding = new Binding() { Path = new PropertyPath("Value"), Source = this.slider1 }; this.txt_Name.SetBinding(TextBox.TextProperty, binding);
或者
Binding binding = new Binding("Value") { Source=this.slider1}; this.txt_Name.SetBinding(TextBox.TextProperty, binding);
Binding多路径
<StackPanel> <TextBox x:Name="textbox1" BorderBrush="Blue" Margin="5"></TextBox> <TextBlock Text="文本的长度" Margin="5"></TextBlock><TextBox x:Name="showlength" Text="{Binding Path=Text.Length,ElementName=textbox1,Mode=OneWay}" BorderBrush="Blue" Margin="5"></TextBox> <TextBlock Text="取得第3个文本"></TextBlock><TextBox x:Name="showIndex" Text="{Binding Path=Text[2],ElementName=textbox1,Mode=OneWay}" BorderBrush="Blue" Margin="5"></TextBox> </StackPanel>
或者
this.showlength.SetBinding(TextBox.TextProperty, new Binding("Text.Length") { Source = this.textbox1, Mode = BindingMode.OneWay }); this.showIndex.SetBinding(TextBox.TextProperty, new Binding("Text[2]") { Source = this.textbox1, Mode = BindingMode.OneWay });
当使用一个集合或者Dadaview作为Binding源时
List<string> stringList = new List<string>() { "iPhone", "Lumia900", "HTC" }; this.textbox1.SetBinding(TextBox.TextProperty, new Binding("/") { Source = stringList }); this.textbox2.SetBinding(TextBox.TextProperty, new Binding("/Length") { Source = stringList, Mode = BindingMode.OneWay }); this.textbox3.SetBinding(TextBox.TextProperty, new Binding("/[2]") { Source = stringList, Mode = BindingMode.OneWay });
“没有Path”的Binding
<StackPanel> <StackPanel.Resources> <sys:String x:Key="myString"> iPhone Lumia HTC </sys:String> </StackPanel.Resources> <TextBlock x:Name="textblock1" TextWrapping="Wrap" Text="{Binding Path=.,Source={StaticResource ResourceKey=myString}}" FontSize="16" Margin="5"></TextBlock> </StackPanel>
或者
string myString="iphone,Lumia900,HTC"; this.textblock1.SetBinding(TextBlock.TextProperty, new Binding(".") { Source = myString });
相关文章推荐
- wpf快速学习笔记四 Binding
- WPF 学习笔记 - 11. Binding (4)
- WPF学习开发历程(一)——明天开始学习
- WPF学习之Binding的学习(一)
- wpf 快速学习笔记五 Binding
- WPF 学习笔记 - 9. Binding (2)
- WPF 学习笔记 - 12. Binding (5)
- WPF 学习笔记 - 11. Binding (4)
- [WPF] Caliburn Micro学习三 Binding
- WPF 学习笔记 - 12. Binding (5)
- WPF、MVVM和Prism学习历程
- wpf的binding学习记录
- WPF、MVVM和Prism学习历程
- WPF学习之Binding(二)
- WPF学习开发历程(四)——内容控件
- wpf快速学习笔记四 Binding
- 学习笔记:WPF之Binding深入探讨
- WPF学习的历程
- wpf 快速学习笔记五 Binding
- 【转载】WPF 学习笔记Binding连载