wpf研究之道——datagrid控件数据绑定

摘要:
T代表了一个ViewModel对象,ViewModel对象的属性和UI界面同步的话,需要实现INotifyPropertyChanged这个接口publiceventPropertyChangedEventHandlerPropertyChanged;protectedvoidNotify{if(PropertyChanged!=null){PropertyChanged;}}PropertyChanged这个事件是什么时候订阅呢?我不禁有这样的疑问,想一想,也是wpfmvvm框架订阅了这个事件。打开DataGridTextColumn类,发现了两个方法:这说明了框架自动生成列单元格,不是TextBox,就是TextBlock,而我们在界面上绑定的值,其实最后赋给它们的Text属性了。

前台:

<DataGrid x:Name="TestCaseDataGrid"    ItemsSource="{Binding}" >

{binding} 是个简写的方式,绑定的是datagrid 对象的DataContext

后台:

 this.TestCaseDataGrid.DataContext = Data.PagerSource;

Data.PagerSource是什么类型?

public ObservableCollection<T>PagerSource
        {
            get { returnpagerSource; }
            set
            {
                pagerSource =value;
                NotifyPropertyChanged("PagerSource");
            }
        }

public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged

通过查看定义,原来绑定的是个泛型集合,而且还实现了两个接口,这两个接口定义了集合变动的事件,界面和ViewModel实现数据同步的。

T代表了一个ViewModel对象,ViewModel对象的属性和UI界面同步的话,需要实现INotifyPropertyChanged这个接口

    public eventPropertyChangedEventHandler PropertyChanged;
        protected void Notify(stringpropName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, newPropertyChangedEventArgs(propName));
            }
        }

PropertyChanged 这个事件是什么时候订阅呢?我不禁有这样的疑问,想一想,也是wpf mvvm框架订阅了这个事件。在网上查了下:

wpf研究之道——datagrid控件数据绑定第1张

我们看看前台的绑定情况

<DataGridTextColumn Header="标题"   Binding="{Binding SearchTitle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

想一想微软如何处理?

wpf研究之道——datagrid控件数据绑定第2张

wpf研究之道——datagrid控件数据绑定第3张

wpf研究之道——datagrid控件数据绑定第4张

打开DataGridTextColumn类,发现了两个方法:

wpf研究之道——datagrid控件数据绑定第5张

这说明了框架自动生成列单元格,不是TextBox,就是TextBlock,而我们在界面上绑定的值,其实最后赋给它们的Text属性了。

这是父类中定义的方法,绑定的处理,看来就在这里面了,有兴趣的话,再去研究。

wpf研究之道——datagrid控件数据绑定第6张

好了,今天就到这里。

免责声明:文章转载自《wpf研究之道——datagrid控件数据绑定》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【VS开发】【C/C++开发】memcpy和memmove的区别vue嵌套路由下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

wpf窗口禁止最大化但允许调整大小

wpf中窗口禁止最大化可以通过属性ResizeMode来设置,但是ResizeMode有一个问题就是如果ResizeMode设置为NoResize的话,是可以禁止最大化的,但是这样同时也就不能拖动调整大小了,通过如下方法可以达到这个效果,通过win32 API来设置: 需要用到的API函数: [DllImport("user32.dll", EntryPo...

Wpf杀死所有线程、Wpf关闭程序杀死所有线程

Wpf关闭程序杀死所有线程: Process.GetCurrentProcess().Kill(); using System.Diagnostics; private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { Process.Get...

WPF 基础学习笔记

学习笔记: WPF中对于控件名字的命名,可在code中找到,例如如下:x:Name=“MassText” ... 如何获取WPF richTextBox的text?有别于winform,比较复杂。 string richText1 = new TextRange(RichTextBox1.Document.ContentStart, RichTextBo...

WPF界面开发:DevExpress WPF在GridControl中固定行时处理时刻

DevExpress广泛应用于ECM企业内容管理、 成本管控、进程监督、生产调度,在企业/政务信息化管理中占据一席重要之地。通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能...

WPF笔记12: 线程处理模型

WPF笔记12: 线程处理模型 本文摘要: 1:理解与UI相关的多线程操作; 2:多个窗口多个线程 1:理解与UI相关的多线程操作     首先来说说传统Winform。我们知道传统Winform新起工作线程,在工作线程中不能对界面元素进行操作。如下面的代码,运行会报错“线程间操作无效: 从不是创建控件“label1”的线程访问它。”:...

C# 配合 Easyui DataGrid 实现增删改查 通用模板

前端代码: <table id="DataGridEmployee"data-options="region:'center',title:'员工列表'"></table>$('#DataGridEmployee').datagrid({ title: '员工列表',...