hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

ReoGrid.Mvvm:ReoGrid绑定模子

2019-11-18杂谈搜奇网26°c
A+ A-

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)

 1 [WorksheetAttribute(Title = "Books")]
 2 public class Book: IRecordModel
 3 {
 4     [ColumnHeader(Index = 10, IsVisible = false)]
 5     public int Id { get; set; }
 6 
 7     [ColumnHeader(Index = 20, Text = "Name", Width = 150)]
 8     public string Title { get; set; }
 9 
10     [ColumnHeader(Index = 30)]
11     public string Author { get; set; }
12 
13     [ColumnHeader(Index = 35, Text = "Type")]
14     public BindingType BindingType { get; set; }
15 
16     [ColumnHeader(Index = 36, Text = "OnSale")]
17     public bool IsOnSale { get; set; }
18 
19     [NumberFormat(DecimalPlaces = 2)]
20     [ColumnHeader(Index = 40)]
21     public decimal Price { get; set; }
22 
23     [DateTimeFormat( CultureName = "en-US")]
24     [ColumnHeader(Index = 45, Text = "Publish Date", Width = 200)]
25     public DateTime Pubdate { get; set; }
26 
27     public int RowIndex { get; set; }
28 }

 

(1) Model 必需完成IRecordModel接口

IRecordModel 只要一个 RowIndex 属性, 你完整不必管这个属性,这是 ReoGrid.Mvvm 内部用到的。

 

(2) WorksheetAttribute 用来申明事情表的名字

可选,不指定该特征,那末就用Model类的类名作为事情表称号。

 

(3) ColumnHeader特征中, 必需指定 Index 属性,其他的是可选的。

 

(4) DateTimeFormat DateTimeFormat 现在不发起运用

ReoGrid自身并没有完整完成这些特征。固然,也有能够我明白有误。

 

4. 在ViewModel中修正:

4.1 建立两个成员变量

1 private ObservableCollection<IRecordModel> _Books;
2 private WorksheetModel _WorksheetModel;

 

4.2 初始化

 1 _Books = new ObservableCollection<IRecordModel>();
 2 for (int i = 0; i < 10; i++)
 3 {
 4     Book book = new Book();
 5     book.Id = i;
 6     book.Title = string.Format("Title {0}", i);
 7     book.Author = string.Format("Author {0}", i);
 8     book.BindingType = BindingType.Hardback;
 9     book.IsOnSale = true;
10     book.Price = (decimal)(i * 10.1);
11     book.Pubdate = DateTime.Now;
12     _Books.Add(book);
13 }
14 // 变量 reoGridControl 是 ReoGridControl 的控件元素实例
15 _WorksheetModel = new WorksheetModel(reoGridControl, typeof(Book), _Books);
16 //假如需要在输入值前搜检变量的有效性,那末就完成该函数
17 _WorksheetModel.OnBeforeChangeRecord += OnBeforeChangeRecord;

 

 4.3 在 OnBeforeChangeRecord 函数中演示输入值有效性搜检

 1 private bool? OnBeforeChangeRecord(IRecordModel record, PropertyInfo propertyInfo, object newProperyValue)
 2 {
 3     if (propertyInfo.Name.Equals("Price"))
 4     {
 5         decimal price = Convert.ToDecimal(newProperyValue);
 6         if (price > 100m) //假定最大价钱是100
 7         {
 8             MessageBox.Show("最大价钱是 100, 请从新输入!.", "Alert", 
 9                             MessageBoxButton.OK, MessageBoxImage.Warning);
10             return true; // 返回 true 则作废本次输入
11         }
12     }
13 
14     return null;
15 }

 

4.4 增添、删除、挪动、编辑 模子(Model)

 1 // 增添一条书目信息
 2 int count = _Books.Count;
 3 Book book = new Book();
 4 book.Id = count;
 5 book.Title = string.Format("Title {0}", count);
 6 book.Author = string.Format("Author {0}", count);
 7 book.BindingType = BindingType.Hardback;
 8 book.IsOnSale = true;
 9 book.Price = (decimal)(count * 10.11) > 100m ? 100m :(decimal)(count * 10.11);
10 book.Pubdate = DateTime.Now;
11 _Books.Add(book);
12 
13 // 移除一条书目信息
14 if (_Books.Count > 0)
15 {
16     _Books.RemoveAt(_Books.Count - 1);
17 }
18 
19 // 挪动一条书目信息
20 if (_Books.Count > 2)
21 {
22     _Books.Move(0, _Books.Count - 1);
23 }
24 
25 // 编辑一条书目信息
26 (_Books[0] as Book).Price = new Random(DateTime.Now.Millisecond).Next(1,100);
27 // 编辑完 模子(Model) 以后要挪用 UpadteRecord 函数将模子(Model)的变化同步到视图(View)中
28 _WorksheetModel.UpadteRecord(_Books[0]); 

 

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
ReoGrid.Mvvm:ReoGrid绑定模子

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282026.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>