Binding及与之配套的数据转换和校验是WPF的核心。一些详细的只是介绍,园子里到处都是,这里DebugLZQ不再赘述。

首先回顾下WPF常用的Binding数据源

1.控件属性---控件的属性与属性Binding

经典的例子如下:

<TextBox Height="23" HorizontalAlignment="Left" Margin="28,42,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Path=Value,ElementName=slider1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/><Slider Height="23" HorizontalAlignment="Left" Margin="28,94,0,0" Name="slider1" VerticalAlignment="Top" Width="225" />

重点是这里:

Text="{Binding Path=Value,ElementName=slider1,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"

2.Object数据源

控件的属性与一个内存Object绑定,该对象所在类实现IPropertyChanged接口

using System.ComponentModel;//

namespace Binding
{class Machine:INotifyPropertyChanged{#region INotifyPropertyChanged 成员public event PropertyChangedEventHandler PropertyChanged;#endregionprivate int temperature;public int Temperature{get { return temperature; }set {temperature = value;//引发事件if (PropertyChanged != null){PropertyChanged.Invoke(this, new PropertyChangedEventArgs("temperature"));}}}}
}

页面布局如下:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;namespace Binding
{/// <summary>/// Window2.xaml 的交互逻辑/// </summary>public partial class Window2 : Window{Machine machine;public Window2(){InitializeComponent();//数据源machine = new Machine();//BindingSystem.Windows.Data.Binding binding = new System.Windows.Data.Binding();binding.Source = machine;binding.Path = new PropertyPath("Temperature");//
            BindingOperations.SetBinding(textBox1, TextBox.TextProperty, binding);}private void button1_Click(object sender, RoutedEventArgs e){System.Timers.Timer timer = new System.Timers.Timer();timer.Interval = 500;timer.Enabled = true;timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);}void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){machine.Temperature++;}}
}

3.XML数据源

不去多说,前面的博文中有类似的

4.ADO.NET中的DataTable

即从数据库获得一个DataTable对象, Binding到DataGrid或ListView。

自定义数据库表定义如下:

//----------直接DataTable数据源-------------------------------------
DataTable dataTable = SQLHelper.GetDataTable();
dataGrid1.ItemsSource = dataTable.DefaultView;

SQLHelper类如下,该静态类之定义了一个方法用来获得一个DataTable,下面的LINQ数据源使用相同的SQLHelper.GetDataTable()方法。

using System.Data.SqlClient;
using System.Data;namespace Binding
{class SQLHelper{public static string connstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\VS2010Pros\Binding\Binding\Database1.mdf;Integrated Security=True;User Instance=True";public static DataTable GetDataTable(){using (SqlConnection conn = new SqlConnection(connstring)){string sql = @"select Id,Name,Age from tb_Student";SqlDataAdapter sda = new SqlDataAdapter(sql, conn);DataTable dt = new DataTable();                sda.Fill(dt);return dt;}}}
}

在xaml中加入Binding,DataGrid控件定义如下:

<DataGrid AutoGenerateColumns="False" Height="130" HorizontalAlignment="Left" Margin="24,16,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="230" ><DataGrid.Columns><DataGridTextColumn Header="Id" Width="60" Binding="{Binding Id}"/><DataGridTextColumn Header="Name" Width="100" Binding="{Binding Name}"/><DataGridTextColumn Header="Age" Width="60" Binding="{Binding Age}"/></DataGrid.Columns></DataGrid>

结果如下(因为DebugLZQ现在开启的是XP系统,所以界面有点丑):

5.LINQ 数据源  DataGrid ListView等控件Binding LINQ数据源

主要是LINQ to DataSet 和LINQ to SQL。

首先是LINQ to DataSet Binding到ListView。其中的dataTable获取方法和上面的一样。

            //----------Linq to DataSet数据源----------------------------------------var query = from row in dataTable.Rows.Cast<DataRow>()where Convert.ToString(row["Name"]).StartsWith("D")select new{Id=int.Parse(row["Id"].ToString()),Name=row["Name"].ToString(),Age = int.Parse(row["Age"].ToString())};listView1.ItemsSource = query;

ListView 定义及Binding如下:

        <ListView Height="100" HorizontalAlignment="Left" Margin="24,173,0,0" Name="listView1" VerticalAlignment="Top" Width="224" ><ListView.View><GridView><GridViewColumn Header="Id" Width="60" DisplayMemberBinding="{Binding Id}"/><GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Name}"/><GridViewColumn Header="Age" Width="60" DisplayMemberBinding="{Binding Age}"/></GridView></ListView.View></ListView>

结果如下:

下面给是LINQ to SQL 数据源Binding到DataGrid控件。

用来映射tb_Student表的Student类定义如下:

using System.Data.Linq.Mapping;namespace Binding
{[Table(Name="tb_Student")]class Student{[Column(IsPrimaryKey = true, DbType = "Int NOT NULL IDENTITY", IsDbGenerated = true, Name = "Id")]public int Id { get; set; }[Column(DbType = "nvarchar(20)", Name = "Name")]public string Name { get; set; }[Column(DbType = "int", Name = "Age")]public int Age { get; set; }}
}

对数据源的LINQ操作如下,随便写了一个:

//---------Linq to SQL 数据源------------------------------------
System.Data.Linq.DataContext dc = new System.Data.Linq.DataContext(SQLHelper.connstring );var students= dc.GetTable<Student>();var query_2 = from s in studentswhere s.Name.Contains("D")select s;dataGrid2.ItemsSource = query_2;

DataGrid 定义及Binding如下:

<DataGrid AlternatingRowBackground="#FFAACC0B" AutoGenerateColumns="False" Height="130" HorizontalAlignment="Left" Margin="267,74,0,0" Name="dataGrid2" VerticalAlignment="Top" Width="230"><DataGrid.Columns><DataGridTextColumn Binding="{Binding Id}" Header="Id" Width="60"   /><DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100" /><DataGridTextColumn Binding="{Binding Age}" Header="Age" Width="60"  /></DataGrid.Columns></DataGrid>

程序运行结果如下:

转载于:https://www.cnblogs.com/DebugLZQ/archive/2012/11/27/2789027.html

WPF DataGrid ListView等控件Binding LINQ数据源相关推荐

  1. WPF 实现 DataGrid/ListView 分页控件

    原文:WPF 实现 DataGrid/ListView 分页控件 在WPF中,通常会选用DataGrid/ListView进行数据展示,如果数据量不多,可以直接一个页面显示出来.如果数据量很大,200 ...

  2. WPF的控件Binding笔记

    WPF的控件Binding笔记 1 绑定一个普通的属性 在类中定义了一个自定义的 content属性(非依赖项属性),在xaml的button的content属性中绑定它. Content=" ...

  3. 在WPF中使用WinForm控件方法

    在WPF中使用WinForm控件方法 原文:在WPF中使用WinForm控件方法 1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,Syste ...

  4. WPF IP地址输入控件的实现

    WPF IP地址输入控件的实现 原文:WPF IP地址输入控件的实现 一.前言 WPF没有内置IP地址输入控件,因此我们需要通过自己定义实现. 我们先看一下IP地址输入控件有什么特性: 输满三个数字焦 ...

  5. WPF 绑定StaticResource到控件的方法

    WPF 绑定StaticResource到控件的方法 原文:WPF 绑定StaticResource到控件的方法 资源文件内的属性能否直接通过绑定应用到控件?答案是肯定的. 比如,我们要直接把下面的& ...

  6. WPF 实现蒙板控件

    WPF 实现蒙板控件 控件名:Mask 作   者:WPFDevelopersOrg - 驚鏵 原文链接[1]:https://github.com/WPFDevelopersOrg/WPFDevel ...

  7. [收藏]为DataGrid添加CheckBox控件

    作者:孟宪会 出自:[孟宪会之精彩世界] 发布日期:2003年5月23日 8点26分11秒 为DataGrid添加CheckBox控件,并实现"全选"功能.这里是实现的例子 VB. ...

  8. Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决

    Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 参考文章: (1)Wpf使用Winform控件后Wpf元素被Winform控件遮盖问题的解决 (2)https://www. ...

  9. asp.net,关于Listview+DataPager控件使用

    关于Listview+DataPager控件使用 1.DAL层,根据开始条数+结束条数查询数据. 2.BLL层,startRowIndex和maximumRows进行查询. (startRowInde ...

最新文章

  1. 在C语言里_大学生:我学了这么久的C语言,为什么感觉它啥都做不了?网友:恰恰相反!...
  2. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第五题:网络寻路
  3. Android对应用程序签名
  4. [转]Microsoft Solution Framework 微软解决方案框架结构
  5. java isempty_Java ArrayDeque isEmpty()方法与示例
  6. mysql 跨域_解决go echo后端处理跨域的两种操作方式
  7. Python+Selenium ----unittest单元测试框架
  8. 【医学图像分割】基于matlab磁共振成像 (MRI) 数值模拟平台【含Matlab源码 826期】
  9. rand()函数实现原理:线性同余法
  10. Java面试精选(6):单例模式有几种写法?
  11. 扫描仪显示计算机繁忙或故障,打印机无法扫描怎么回事 游戏设备问题解决分享!...
  12. 使用 AES 对称加密算法对视频文件进行加密解密(C++ 及 Java 实现)
  13. visio-制作甘特图工具
  14. 计算机大赛搞笑队名,电子设计大赛队名
  15. 计算机管理没有指定运行,如何限制电脑只运行一个软件?只打开指定软件?
  16. 硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
  17. 盘点那些欺骗我感情的数学定理
  18. 【RK3399】[Android 6.0] linux4.4 调试8723BU记录过程
  19. hackbar黑客插件
  20. Pandas Dataframe 每隔n行取1行

热门文章

  1. upper_bound( )和lower_bound()的用法
  2. 2014蓝桥杯C++B:啤酒和饮料;切面条(思维分析)
  3. 莫队(bzoj 2038: [2009国家集训队]小Z的袜子(hose))
  4. python深度学习库keras——安装
  5. 安卓使用MediaPlayer自定义音频视频播放器
  6. ModuleNotFoundError: No module named ‘pip‘
  7. 贺利坚老师汇编课程29笔记:在代码段使用栈将程序定义的数据逆序
  8. 信息论与贝叶斯(二)
  9. mybatis问题。foreach循环遍历数组报错情况,及其解决方法
  10. hdu 5755 Gambler Bo 高斯消元