- 把普通的CLR类型单个对象指定为Source
包括.NET Framework自带类型的对象和用户自定义类型的对象。如果类型实现了INotifyPropertyChanged接口,则可通过在属性的Set语句里出发PropertyChanged事件来通知Binding来更新数据。具体例子参考这里。
- 把普通的CLR集合类型对象指定为Source
包括数组、List<T>、ObservableCollection<T>等集合类型。实际工作中,我们经常需要把一个集合作为ItemContorl派生类的数据源来使用,一般是把控件的ItemSource属性使用Binding关联到一个集合对象上。
WPF的列表式控件都派生自ItemControl,自然也都集成类ItemSource属性。ItemSource可以接收一个IEnumerable接口派生类的实例作为自己的值。只要我们为一个ItemControl对象设置了ItemSource属性,ItemControl对象就会自动迭代其中的数据元素、为每个数据元素准备一个条目容器,并使用Binding在条目容器与数据元素之间建立关联。
比如我们要把一个List<Student>集合作为ListBox的ItemSource,让ListBox显示Student的Name,UI代码如下:
<Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="175" Width="225" Loaded="Window_Loaded"> <StackPanel> <ListBox x:Name="listBox" Height="120" Margin="5"></ListBox> </StackPanel> </Window>
在Load里设置Binding,代码如下:
private void Window_Loaded(object sender, RoutedEventArgs e) { //准备数据 List<Student> Students = new List<Student>() { new Student(){Id=1,Name="Tim",Age=19}, new Student(){Id=2,Name="Tom",Age=18}, new Student(){Id=3,Name="Kate",Age=17}, }; //为ListBox设置Binding this.listBox.ItemsSource = Students; this.listBox.DisplayMemberPath = "Name"; }
- 把ADO.NET数据对象指定为Source
- 使用XmlDataProvider把XML数据指定为Source
- 把依赖对象(Dependency Object)指定为Source
- 把容器的DataContext指定为Source
- 通过ElementName指定Source
- 通过Binding的RelativeSource属性相对的指定Source
- 把ObjectDataProvider对象指定为Source
- 把使用Linq检索得到的数据对象作为Binding的源
时间: 2024-10-05 09:08:09