一、为何说它是知识盲区呢
1、首先很多人应该都和我一样知道itemsSource,在 Windows 应用程序中很多控件都提供了 DataSource 属性,并将 DataSet 或 DataTable 的值直接赋给该属性,这样在控件中即可显示从数据库中查询出来的数据。
常用的数据绑定控件有文本框(TextBox)、标签(Label)、列表框(ListBox)、组合框(ComboBox)、数据表格(DataGridView)等。
2、以前我只知道如何去使用控件绑定数据,显示数据值。当数据源发生改变时重新绑定数据源,初始化数据。
下面有一个例子,我们可以看到,初始化界面的时候,数据绑定了一次(mygard.ItemsSource),当点击按钮的时候,itemsource的值就发生改变了,这个是为什么呢?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace testControl { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } public List<Member> memberData = new List<Member>(); private void Window_Loaded(object sender, RoutedEventArgs e) { memberData.Add(new Member() { Name = "Joe", Age = "23", Sex = SexOpt.Male, Pass = true, Email = new Uri("mailto:Joe@school.com") }); memberData.Add(new Member() { Name = "Mike", Age = "20", Sex = SexOpt.Male, Pass = false, Email = new Uri("mailto:Mike@school.com") }); memberData.Add(new Member() { Name = "Lucy", Age = "25", Sex = SexOpt.Female, Pass = true, Email = new Uri("mailto:Lucy@school.com") }); mygard.ItemsSource = memberData; } private void Button_Click(object sender, RoutedEventArgs e) { memberData.Add(new Member() { Name = "zhang", Age = "11", Sex = SexOpt.Male, Pass = true, Email = new Uri("mailto:Joe@school.com") }); memberData.Add(new Member() { Name = "lisi", Age = "12", Sex = SexOpt.Male, Pass = false, Email = new Uri("mailto:Mike@school.com") }); memberData.Add(new Member() { Name = "wangwu", Age = "45", Sex = SexOpt.Female, Pass = true, Email = new Uri("mailto:Lucy@school.com") }); memberData.Add(new Member() { Name = "", Age = "11", Sex = SexOpt.Male, Pass = true, Email = new Uri("mailto:Joe@school.com") }); memberData.Add(new Member() { Name = "lisi", Age = "12", Sex = SexOpt.Male, Pass = false, Email = new Uri("mailto:Mike@school.com") }); memberData.Add(new Member() { Name = "wangwu", Age = "45", Sex = SexOpt.Female, Pass = true, Email = new Uri("mailto:Lucy@school.com") }); } } public enum SexOpt { Male, Female }; public class Member { public string Name { get; set; } public string Age { get; set; } public SexOpt Sex { get; set; } public bool Pass { get; set; } public Uri Email { get; set; } } }
三、附上微软的官方解读
其实呢,最最主要的还是因为这个
定义
表示一个动态数据集合,它可在添加、删除项目或刷新整个列表时提供通知。
ItemsControl 来显示记录集合。
CollectionChanged 事件,即每当基础集合发生更改时应引发的事件。
INotifyCollectionChanged 接口的数据集合的内置实现。
IList提供与数据绑定引擎的最佳性能。
接口
这些都是微软的解读,我就不亲自解读了hhh
本文有点混乱,主要是为了做个笔记