以下代码实现了DataGrid的简单绑定List数据源

重点要提一下的是,绑定List数据源,但是不能直接用List。比如下面的代码,使用List<GridItem>只能实现数据修改的绑定,但是数据添加,删除都无法实现双向绑定。所以这里要改用ObservableCollection<GridItem>,其他代码都不用改。只要类型改下即可,WPF内部已经实现了添加,删除等的双向绑定功能。

接下去,就直接上代码了....

1、Model

public class GridModel{public GridModel(){GridData = new ObservableCollection<GridItem>();}public ObservableCollection<GridItem> GridData{get{return _griddata;}set{_griddata = value;}}private ObservableCollection<GridItem> _griddata;}

GridItem数据类
public class GridItem : INotifyPropertyChanged{public GridItem(string name, string sex, bool chk = false){Name = name;Sex = sex;UserChecked = chk;}public string Name{get { return _name; }set {if (_name != value){_name = value;OnPropertyChanged("Name");}}}public string Sex{get { return _sex; }set{if (_sex != value){_sex = value;OnPropertyChanged("Sex");}}}public bool UserChecked{get { return _userchecked; }set{if (_userchecked != value){_userchecked = value;OnPropertyChanged("UserChecked");}}}public event PropertyChangedEventHandler PropertyChanged;protected virtual void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}private string _name;private string _sex;private bool _userchecked;}

2、ViewModel

public class GridViewModel{public GridViewModel(){GridSource = new GridModel();GridSource.GridData.Add(new GridItem("王路飞", "男"));GridSource.GridData.Add(new GridItem("娜美", "女", true));AddCommand = new DelegateCommand(Add, (obj) => true);DecCommand = new DelegateCommand(Dec, (obj) => true);ModifyCommand = new DelegateCommand(Modify, (obj) => true);ShowCommand = new DelegateCommand(Show, (obj) => true);}public GridModel GridSource{ get; set; }public ICommand AddCommand{ get; set; }public ICommand DecCommand{ get; set; }public ICommand ModifyCommand{ get; set; }public ICommand ShowCommand{ get; set; }private void Add(object obj){GridSource.GridData.Add(new GridItem("Luffy", "man",true));}private void Dec(object obj){GridSource.GridData.RemoveAt(0);}private void Modify(object obj){GridSource.GridData[0].Name = "路飞";GridSource.GridData[0].Sex = "女";GridSource.GridData[0].UserChecked = true;}private void Show(object obj){MessageBox.Show(GridSource.GridData[0].Name + "," + GridSource.GridData[0].Sex + "," + GridSource.GridData[0].UserChecked);}}

3、XMAL

<Grid><TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="27,25,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"></TextBox><Label x:Name="label" Content="Label" Margin="173,23,79,0" VerticalAlignment="Top"/><Label x:Name="label1" Content="Label" Margin="233,23,19,0" VerticalAlignment="Top"/><DataGrid x:Name="dataGrid" Margin="16,71,19,44" ItemsSource="{Binding GridSource.GridData}" AutoGenerateColumns="False"><DataGrid.Columns><DataGridTemplateColumn Header="选中" Width="40"><DataGridTemplateColumn.CellTemplate><DataTemplate><CheckBox IsChecked="{Binding UserChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></CheckBox></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTextColumn Header="用户名" Width="80" Binding="{Binding Name, Mode=TwoWay}"/><DataGridTextColumn Header="用户性别" Width="80" Binding="{Binding Sex, Mode=TwoWay}"/></DataGrid.Columns></DataGrid><Button x:Name="button"  Content="添加" Command="{Binding AddCommand}" HorizontalAlignment="Left" Margin="16,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy" Content="删除" Command="{Binding DecCommand}" HorizontalAlignment="Left" Margin="83,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy1" Content="修改" Command="{Binding ModifyCommand}" HorizontalAlignment="Left" Margin="151,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy2" Content="显示" Command="{Binding ShowCommand}" HorizontalAlignment="Left" Margin="220,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/></Grid>

4、后台代码

 this.DataContext = new ViewModel.GridViewModel();

功能补充:一个文本框绑定2个属性X+Y形式

1、XMAL修改,主要是绑定使用MultiBinding (红色是新增的)

<Window x:Class="AddMessage.BindingTest"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:AddMessage"xmlns:localmodel="clr-namespace:AddMessage.Model"mc:Ignorable="d"Title="BindingTest" Height="300" Width="300" WindowStartupLocation="CenterScreen"> <Window.Resources><localmodel:TextConverter x:Key="TxtConvert"></localmodel:TextConverter></Window.Resources><Grid> <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="27,25,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"><TextBox.Text><MultiBinding Converter="{StaticResource TxtConvert}"><Binding Path="Text" ElementName="lblleft"/><Binding Path="Text" ElementName="lblright"/></MultiBinding></TextBox.Text></TextBox><TextBox x:Name="lblleft" Text="1" Margin="173,23,79,0" Height="25" VerticalAlignment="Top"/><TextBox x:Name="lblright" Text="2" Margin="233,23,19,0" Height="25" VerticalAlignment="Top"/><DataGrid x:Name="dataGrid" Margin="16,71,19,44" ItemsSource="{Binding GridSource.GridData}" AutoGenerateColumns="False"><DataGrid.Columns><DataGridTemplateColumn Header="选中" Width="40"><DataGridTemplateColumn.CellTemplate><DataTemplate><CheckBox IsChecked="{Binding UserChecked, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></CheckBox></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTextColumn Header="用户名" Width="80" Binding="{Binding Name, Mode=TwoWay}"/><DataGridTextColumn Header="用户性别" Width="80" Binding="{Binding Sex, Mode=TwoWay}"/></DataGrid.Columns></DataGrid><Button x:Name="button"  Content="添加" Command="{Binding AddCommand}" HorizontalAlignment="Left" Margin="16,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy" Content="删除" Command="{Binding DecCommand}" HorizontalAlignment="Left" Margin="83,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy1" Content="修改" Command="{Binding ModifyCommand}" HorizontalAlignment="Left" Margin="151,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/><Button x:Name="button_Copy2" Content="显示" Command="{Binding ShowCommand}" HorizontalAlignment="Left" Margin="220,0,0,5" Width="53" Height="29" VerticalAlignment="Bottom"/></Grid>
</Window>

2、TextConverter 格式转换类,即处理,将2个文本合并成一个文本

public class TextConverter : IMultiValueConverter{public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture){string val = "";foreach (var v in values){if (val == "")val = v.ToString();elseval += "+" + v;}return val;}public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture){string val = value.ToString();string[] vals = val.Split('+');return vals;}}

转载于:https://www.cnblogs.com/mqxs/p/9575110.html

【WPF】WPF DataGrid List数据源 双向绑定通知机制之ObservableCollection使用以及MultiBinding 的应用...相关推荐

  1. WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/

    <TextBox Name="txtAbout" Tag="废话">最近才开始正规的学习WPF,以前只是激动,观摩,欣赏,不敢亵玩焉!我这个从游戏而 ...

  2. 解决WPF ListView虚拟化ListViewItem的IsSelected属性MVVM双向绑定bool值后出现的绑定错乱的问题

    在一次使用WPF ListView的时候,我发现在MVVM模式下在ListView开启虚拟化的情况下,将ListViewItem的IsSelected属性与一个对应的布尔值进行双向绑定. 文档目录结构 ...

  3. WPF基础-DataGrid

    WPF基础DataGrid(VS2015+Win10) 在WPF中,主要使用DataGrid控件进行表格化数据的展示,控件提供一个用户界面,用于 ADO.NET 数据集(ADO.NET是微软的一个组件 ...

  4. 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH

    在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH 原文 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不 ...

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

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

  6. WPF之DataGrid控件使用

    WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...

  7. 有关WPF中DataGrid控件的基础应用总结

    基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...

  8. C# wpf中DataGrid 支持汇总行

    最近有一个需求,需要汇总金额,份额等字段.我们使用的是原生的WPF控件,自己开发了一套Template.而没有使用比较成熟的第三方控件.所以这个功能得自己开发.并且要做成控件层次的功能. 当然也可以这 ...

  9. WPF之DataGrid

    1.WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2.WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3.WPF 4 DataGrid 控 ...

最新文章

  1. 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
  2. filter的原理(转)
  3. mfc对话框在不同计算机上显示不全
  4. iphone手机型号获取
  5. 在ASP.NET MVC中实现Select多选
  6. Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)
  7. (40)FPGA面试技能提升篇(OAM与SDH协议)
  8. 操作系统 第二章 进程管理
  9. BCrypt加密怎么存入数据库_松哥手把手带你入门 Spring Security,别再问密码怎么解密了...
  10. [学]《Python 核心编程》学习笔记(五)
  11. Repeater使用方法---基础数据绑定+多级嵌套
  12. 2017年云南职称计算机考试,云南省2017年职称计算机考试内容及考试方式
  13. JS实现文件的上传与下载
  14. 凭借UGC壮大的马蜂窝,亦是喜忧参半
  15. 高仿微信表情控件 -- LQREmojiLibrary
  16. Andriod Studio 安装过程
  17. 10G整数文件中寻找中位数
  18. 七分之一在线评论都有假,人工智能救一把?
  19. Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息
  20. win7网络上计算机进不去,Win7电脑开机进不了系统怎么办?

热门文章

  1. vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
  2. Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比
  3. Mysql基础知识:创建、查看、修改和删除表
  4. JDBC结合JSP使用(2)
  5. Get 和 Post方法的登录
  6. 超外差和超再生模块有何区别?
  7. Android:Eclipse如何删除ADT
  8. 新发现的两个Delphi要点。
  9. redis 公网 安全_请务必注意 Redis 安全配置,否则将导致轻松被入侵
  10. _Linux后台开发6大常用的开源库,让你在同行中脱颖而出