ReoGrid.Mvvm:ReoGrid绑定模型
ReoGrid 是 C# 编写的.NET 电子表格控件(类似 Excel)。支持单元格合并,边框样式,图案背景颜色,数据格式,冻结,公式,宏和脚本执行,表格事件等。支持 Winform\WPF。
ReoGrid.Mvvm 是针对 ReoGrid.WPF 编写的一个开源类库,用于方便地将控件绑定到模型,从而实现模型(Model)和视图(View)的分离,适用于MVVM模式的开发。
项目地址:https://github.com/IUpdatable/ReoGrid.Mvvm,欢迎star
下面以一个图书信息的简单项目演示如何使用 ReoGrid.Mvvm. 完整代码见项目 ReoGrid.Mvvm.Demo.
演示效果如图

1. 创建一个 WPF 项目
2. NuGet 安装 ReoGrid.Mvvm
Install-Package ReoGrid.Mvvm
3. 创建一个图书的模型(Model)
[WorksheetAttribute(Title = "Books")]
public class Book: IRecordModel
{
[ColumnHeader(Index = , IsVisible = false)]
public int Id { get; set; } [ColumnHeader(Index = , Text = "Name", Width = )]
public string Title { get; set; } [ColumnHeader(Index = )]
public string Author { get; set; } [ColumnHeader(Index = , Text = "Type")]
public BindingType BindingType { get; set; } [ColumnHeader(Index = , Text = "OnSale")]
public bool IsOnSale { get; set; } [NumberFormat(DecimalPlaces = )]
[ColumnHeader(Index = )]
public decimal Price { get; set; } [DateTimeFormat( CultureName = "en-US")]
[ColumnHeader(Index = , Text = "Publish Date", Width = )]
public DateTime Pubdate { get; set; } public int RowIndex { get; set; }
}
(1) Model 必须实现IRecordModel接口
IRecordModel 只有一个 RowIndex 属性, 你完全不用管这个属性,这是 ReoGrid.Mvvm 内部用到的。
(2) WorksheetAttribute 用来说明工作表的名字
可选,不指定该特性,那么就用Model类的类名作为工作表名称。
(3) ColumnHeader特性中, 必须指定 Index 属性,其他的是可选的。
(4) DateTimeFormat DateTimeFormat 目前不建议使用
ReoGrid本身并没有完整实现这些特性。当然,也有可能我理解有误。
4. 在ViewModel中修改:
4.1 创建两个成员变量
private ObservableCollection<IRecordModel> _Books;
private WorksheetModel _WorksheetModel;
4.2 初始化
_Books = new ObservableCollection<IRecordModel>();
for (int i = ; i < ; i++)
{
Book book = new Book();
book.Id = i;
book.Title = string.Format("Title {0}", i);
book.Author = string.Format("Author {0}", i);
book.BindingType = BindingType.Hardback;
book.IsOnSale = true;
book.Price = (decimal)(i * 10.1);
book.Pubdate = DateTime.Now;
_Books.Add(book);
}
// 变量 reoGridControl 是 ReoGridControl 的控件元素实例
_WorksheetModel = new WorksheetModel(reoGridControl, typeof(Book), _Books);
//如果需要在输入值前检查变量的有效性,那么就实现该函数
_WorksheetModel.OnBeforeChangeRecord += OnBeforeChangeRecord;
4.3 在 OnBeforeChangeRecord 函数中演示输入值有效性检查
private bool? OnBeforeChangeRecord(IRecordModel record, PropertyInfo propertyInfo, object newProperyValue)
{
if (propertyInfo.Name.Equals("Price"))
{
decimal price = Convert.ToDecimal(newProperyValue);
if (price > 100m) //假设最大价格是100
{
MessageBox.Show("最大价格是 100, 请重新输入!.", "Alert",
MessageBoxButton.OK, MessageBoxImage.Warning);
return true; // 返回 true 则取消本次输入
}
} return null;
}
4.4 增加、删除、移动、编辑 模型(Model)
// 增加一条书目信息
int count = _Books.Count;
Book book = new Book();
book.Id = count;
book.Title = string.Format("Title {0}", count);
book.Author = string.Format("Author {0}", count);
book.BindingType = BindingType.Hardback;
book.IsOnSale = true;
book.Price = (decimal)(count * 10.11) > 100m ? 100m :(decimal)(count * 10.11);
book.Pubdate = DateTime.Now;
_Books.Add(book); // 移除一条书目信息
if (_Books.Count > )
{
_Books.RemoveAt(_Books.Count - );
} // 移动一条书目信息
if (_Books.Count > )
{
_Books.Move(, _Books.Count - );
} // 编辑一条书目信息
(_Books[] as Book).Price = new Random(DateTime.Now.Millisecond).Next(,);
// 编辑完 模型(Model) 之后要调用 UpadteRecord 函数将模型(Model)的变化同步到视图(View)中
_WorksheetModel.UpadteRecord(_Books[]);
ReoGrid.Mvvm:ReoGrid绑定模型的更多相关文章
- 前端MVVM框架avalon - 模型转换1
轻量级前端MVVM框架avalon - 模型转换(一) 接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: fun ...
- C#使用Xamarin开发可移植移动应用(3.进阶篇MVVM双向绑定和命令绑定)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...
- C#使用Xamarin开发可移植移动应用(4.进阶篇MVVM双向绑定和命令绑定)附源码
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 嗯..前面 ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- 【Maui正式版】创建可跨平台的Maui程序,以及有关依赖注入、MVVM双向绑定的实现和演示
前言:Maui终于在昨天(2022年8月9日)推送出来了.今儿就迫不及待来把玩一下先. A.我本地已有VS2022,不过版本比较老,此处选择更新.工具 -> 获取功能和更新里面,可以获取到新版本 ...
- WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)
MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): <Wind ...
- 轻量级前端MVVM框架avalon - 模型转换
接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: function modelFactory(scope) { ...
- MVVM命令绑定原理
跟据网上前辈们的资料.了解到命令在MVVM绑定有三种行式. 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand /// <summa ...
- 仿vue实现简易版mvvm双向绑定
项目地址:https://github.com/pangyongsheng/mvvm 1. 指令 vm-bind 单选数据绑定- 将数据显示到标签视图 vm-model : 双向数据绑定 vm-sho ...
随机推荐
- C语言入门-函数
一.初见函数 求出1到10.20到30和35到45的三个的和 #include <stdio.h> // 定义一个函数 void sum(int begin, int end) { int ...
- js校验对象是否全部为空
function judgeIsNotBlank(obj) { var bool = true; var arr = Object.keys(obj); ; for(var key in obj){ ...
- springboot启动报错 Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
新建了一个springboot项目报一下错误: Failed to configure a DataSource: 'url' attribute is not specified and no em ...
- 短视频处理LanSoEditor-SDK之功能介绍
短视频处理LanSoEditor-SDK之功能介绍 (注释: 我们的SDK每3周更新一次, 一下功能是在2.8.2版本上列出的,可能不是最新的功能, 请知悉) 和别家最大的不同在于: 别人提供功能, ...
- 推荐几个我近期排查线上http接口偶发415时用到的工具
导读:近期有一个业务部门的同学反馈说他负责的C工程在小概率情况下SpringMvc会返回415,通过输出的日志可以确定是SpringMvc找不到content-type这个头了,具体为什么找不到了呢? ...
- Linux下几种常见压缩方式测试对比
目录 Linux下几种常见压缩方式测试对比 参考 简介 测试 总结 Linux下几种常见压缩方式测试对比
- Shell之Xargs命令
目录 Shell之Xargs命令 参考 xargs命令简介 xargs命令格式 xargs实例说明 Shell之Xargs命令
- Python集训营45天—Day08 (文件操作)
目录 1. 文件操作介绍 2. 文件的读写 2.1 文本文件 2.2 二进制文件 2.3 JSON文件 3. 文件的定位,重命名和删除 4. 文件夹的相关操作 1. 文件操作介绍 大家应该听说过一句话 ...
- 设计时数据源: 在ActiveReports中直接连接PostgreSql 数据库
在之前的博客中,我们学习了如何在运行时绑定PostgreSql 数据库,今天我们学习,如何直连PostgreSQL 数据库. 1. 安装PostgreSQL 的ODBC驱动程序 https://www ...
- 编程小技巧之 Linux 文本处理命令
合格的程序员都善于使用工具,正所谓君子性非异也,善假于物也.合理的利用 Linux 的命令行工具,可以提高我们的工作效率. 本文简单的介绍三个能使用 Linux 文本处理命令的场景,给大家开阔一下思路 ...