【WPF】WPF DataGrid List数据源 双向绑定通知机制之ObservableCollection使用以及MultiBinding 的应用...
以下代码实现了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 的应用...相关推荐
- WPF Tile=” 变量 UI 双向绑定”x:Class=Problem/
<TextBox Name="txtAbout" Tag="废话">最近才开始正规的学习WPF,以前只是激动,观摩,欣赏,不敢亵玩焉!我这个从游戏而 ...
- 解决WPF ListView虚拟化ListViewItem的IsSelected属性MVVM双向绑定bool值后出现的绑定错乱的问题
在一次使用WPF ListView的时候,我发现在MVVM模式下在ListView开启虚拟化的情况下,将ListViewItem的IsSelected属性与一个对应的布尔值进行双向绑定. 文档目录结构 ...
- WPF基础-DataGrid
WPF基础DataGrid(VS2015+Win10) 在WPF中,主要使用DataGrid控件进行表格化数据的展示,控件提供一个用户界面,用于 ADO.NET 数据集(ADO.NET是微软的一个组件 ...
- 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH
在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不允许DEFERREFRESH 原文 在WPF的DATAGRID中快速点击出现在ADDNEW或EDITITEM事务过程不 ...
- WPF 实现 DataGrid/ListView 分页控件
原文:WPF 实现 DataGrid/ListView 分页控件 在WPF中,通常会选用DataGrid/ListView进行数据展示,如果数据量不多,可以直接一个页面显示出来.如果数据量很大,200 ...
- WPF之DataGrid控件使用
WPF之DataGrid控件使用 一.DataGrid简介 二.DataGrid数据源绑定 三.DataGrid单元格编辑触发事件 四.DataGrid增加删除行 五.DataGrid数据触发器 参考 ...
- 有关WPF中DataGrid控件的基础应用总结
基础说明 DataGrid是WPF提供的基础控件,它可以非常轻松的呈现出一张表格,本文章会按照从易到难的顺序依次将DataGrid的使用方法进行解说,除了MSDN上给出的最基本的例子之外,给出了三个比 ...
- C# wpf中DataGrid 支持汇总行
最近有一个需求,需要汇总金额,份额等字段.我们使用的是原生的WPF控件,自己开发了一套Template.而没有使用比较成熟的第三方控件.所以这个功能得自己开发.并且要做成控件层次的功能. 当然也可以这 ...
- WPF之DataGrid
1.WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2.WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3.WPF 4 DataGrid 控 ...
最新文章
- 上市13年,AI平台收入还能暴增131%,这家老牌AI公司正在“反杀”
- filter的原理(转)
- mfc对话框在不同计算机上显示不全
- iphone手机型号获取
- 在ASP.NET MVC中实现Select多选
- Ubuntu14.04 + KinectV2驱动安装 以及 Ros接口(基于网上方法试错 改进版)
- (40)FPGA面试技能提升篇(OAM与SDH协议)
- 操作系统 第二章 进程管理
- BCrypt加密怎么存入数据库_松哥手把手带你入门 Spring Security,别再问密码怎么解密了...
- [学]《Python 核心编程》学习笔记(五)
- Repeater使用方法---基础数据绑定+多级嵌套
- 2017年云南职称计算机考试,云南省2017年职称计算机考试内容及考试方式
- JS实现文件的上传与下载
- 凭借UGC壮大的马蜂窝,亦是喜忧参半
- 高仿微信表情控件 -- LQREmojiLibrary
- Andriod Studio 安装过程
- 10G整数文件中寻找中位数
- 七分之一在线评论都有假,人工智能救一把?
- Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息
- win7网络上计算机进不去,Win7电脑开机进不了系统怎么办?
热门文章
- vue2.0中ckeckbox(复选框)的使用心得,及对click事件和change的理解
- Kafka、 RabbitMQ、Redis、 ZeroMQ、 ActiveMQ、 Kafka/Jafka 对比
- Mysql基础知识:创建、查看、修改和删除表
- JDBC结合JSP使用(2)
- Get 和 Post方法的登录
- 超外差和超再生模块有何区别?
- Android:Eclipse如何删除ADT
- 新发现的两个Delphi要点。
- redis 公网 安全_请务必注意 Redis 安全配置,否则将导致轻松被入侵
- _Linux后台开发6大常用的开源库,让你在同行中脱颖而出