一、为何说它是知识盲区呢

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; }
    }
}

三、附上微软的官方解读

关于我的知识盲区之ItemsSource的分享~

 

 其实呢,最最主要的还是因为这个

定义

表示一个动态数据集合,它可在添加、删除项目或刷新整个列表时提供通知。

ItemsControl 来显示记录集合。

CollectionChanged 事件,即每当基础集合发生更改时应引发的事件。

INotifyCollectionChanged 接口的数据集合的内置实现。

 

IList提供与数据绑定引擎的最佳性能。

 接口

这些都是微软的解读,我就不亲自解读了hhh

 

本文有点混乱,主要是为了做个笔记

 

 

相关文章:

  • 2021-05-21
  • 2021-12-08
  • 2021-11-23
  • 2021-08-22
  • 2021-08-31
  • 2022-02-06
  • 2021-04-05
  • 2019-09-11
猜你喜欢
  • 2019-10-22
  • 2019-10-23
  • 2021-04-20
  • 2021-05-20
  • 2022-01-12
  • 2021-11-22
  • 2021-11-12
相关资源
相似解决方案