zoukankan      html  css  js  c++  java
  • WPF DataContext和ItemSource

    一对多的关系
    DataContext为上下文,绑定数据源
    ItemSource取上下文中的某属性,会一级一级往上找属性

    一般ItemSource的绑定,绑定到Grid/DataGrid一类容器上,底下的控件到这一级找

    对比

    1.DataContext 一般是一个非集合性质的对象,而ItemSource 更期望数据源是集合对象
    2.DataContext 是 FrameworkElement 类中定义的一个依赖属性(Dependency property),ItemsSource是 在ItemsControl 类中定义的。所有继承自FrameworkElement 的类(控件)都可以使用DataContext属性并给其赋值,但我们只能给ItemsSource赋值为集合对象
    3.DataContext不能产生模板,它只能用来筛选出数据,供其它控件来绑定。而ItemsSource主要作用就是给模板提供数据
    4.DataContext主要用来抓取一些子元素需要使用的数据,以保证子元素能够顺利的使用数据。ItemsSource不会用来分享数据,它只是对定义好的元素有效

    举例

    后台

    public partial class DataContextAndItemSource : Window
    {
        public DataContextAndItemSource()
        {
            InitializeComponent();
            ObservableCollection<Student> students = new ObservableCollection<Student>();
            students.Add(new Student()
            {
                Age = 15,
                Name = "吴芳",
                Sex = "女"
            });
            students.Add(new Student()
            {
                Age = 16,
                Name = "刘洋",
                Sex = "男"
            });
            //给DataContextAndItemSource的DataContext赋值
            DataContext = students;
        }
    }
    

    前端

    <!--ItemsSource绑定后台DataContext的数据-->
    <DataGrid  AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" IsEnabled="False">
        <DataGrid.Columns>
            <DataGridTextColumn Width="*" Binding="{Binding Name}" Header="名称" />
            <DataGridTextColumn Width="*" Binding="{Binding Age}" Header="年龄" />
        </DataGrid.Columns>
    </DataGrid>
    

    示例代码

    https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/DataContextAndItemSource

  • 相关阅读:
    NGINX+uWsgi部署Django项目
    centos7 docker启动服务,无法通过宿主机ip进行访问
    基于docker 搭建Prometheus+Grafana
    centos7安装MySQL5.7
    centos7下安装python7
    loadrunner27257问题解决办法
    学习Python+selenium自动化感想
    find_element和find_elements
    正则表达式
    Jdk自带的Windows性能监控工具JVM
  • 原文地址:https://www.cnblogs.com/Lulus/p/8150880.html
Copyright © 2011-2022 走看看