首页 > 数据库 >WPF+SqlSugar+MVVM实现增删改查(二)

WPF+SqlSugar+MVVM实现增删改查(二)

时间:2023-12-26 14:26:19浏览次数:44  
标签:MVVM 改查 System using new WPF null parameter public

这相对于上一版本的升级版

如果不理解看请看第一版:WPF+SqlSugar+MVVM实现增删改查 - 六子12138 - 博客园 (cnblogs.com)

ViewModels代码

  1 using Entitys;
  2 using SqlSugar;
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Collections.ObjectModel;
  6 using System.ComponentModel;
  7 using System.Linq;
  8 using System.Text;
  9 using System.Threading.Tasks;
 10 using System.Windows.Controls;
 11 using WpfMVVM.Model;
 12 using WpfMVVM.Views;
 13 
 14 namespace WpfMVVM.ViewModel
 15 {
 16 public class UserViewModel : INotifyPropertyChanged
 17 {
 18 public event PropertyChangedEventHandler PropertyChanged;
 19 protected void OnPropertyChanged(string PropertyName)
 20 {
 21 if (PropertyChanged != null)
 22 {
 23 PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
 24 }
 25 }
 26 
 27 SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
 28 {
 29 //数据库配置
 30 ConnectionString = "Data Source=.;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=123456",
 31 
 32 DbType = DbType.SqlServer,//设置数据库类型
 33 
 34 IsAutoCloseConnection = true,//自动释放数据务,如果存在事务,在事务结束后释放
 35 
 36 InitKeyType = InitKeyType.Attribute //从实体特性中读取主键自增列信息
 37 
 38 });
 39 
 40 
 41 private ObservableCollection<Users> userList;
 42 /// <summary>
 43 /// 用户集合
 44 /// </summary>
 45 public ObservableCollection<Users> UserList
 46 {
 47 get
 48 {
 49 if (userList == null)
 50 {
 51 userList = new ObservableCollection<Users>();
 52 //设置数据源 //也可以直接写查询
 53 userList = new ObservableCollection<Users>(db.Queryable<Users>().ToList());
 54 }
 55 return userList;
 56 }
 57 set {
 58 if (userList == null)
 59 {
 60 userList = new ObservableCollection<Users>();
 61 }
 62 userList = value;
 63 //当UserList实体的数据发生改变时实现属性更改通知
 64 OnPropertyChanged("UserList");
 65 }
 66 }
 67 
 68 private Users selectWhere;
 69 
 70 public Users SelectWhere
 71 {
 72 get
 73 {
 74 if (selectWhere == null)
 75 {
 76 selectWhere = new Users();
 77 selectWhere.U_Name = "";
 78 selectWhere.U_Sex = "全部";
 79 //多条件查询的初始化
 80 }
 81 return selectWhere;
 82 }
 83 set
 84 {
 85 if (selectWhere == null)
 86 {
 87 selectWhere = new Users();
 88 }
 89 selectWhere = value;
 90 //当SelectWhere实体的数据发生改变时实现属性更改通知
 91 OnPropertyChanged("SelectWhere");
 92 }
 93 }
 94 
 95 
 96 public Users selectUser;
 97 /// <summary>
 98 /// 被选中的用户
 99 /// </summary>
100 public Users SelectUser
101 {
102 get
103 {
104 if (selectUser == null)
105 {
106 selectUser = new Users();
107 
108 }
109 return selectUser;
110 }
111 set
112 {
113 if (selectUser == null)
114 {
115 selectUser = new Users();
116 }
117 selectUser = value;
118 //当SelectUser实体的数据发生改变时实现属性更改通知
119 OnPropertyChanged("SelectUser");
120 }
121 }
122 
123 public UserViewModel()
124 {
125 //注册命令
126 RegisterCommands();
127 }
128 
129  
130 
131 /// <summary>
132 /// 注册命令
133 /// </summary>
134 private void RegisterCommands()
135 {
136 SelectionWhereCommand = new DelegateCommands();
137 SelectionWhereCommand.ExecuteCommand = new Action<object>(SelectionWhere);
138 AddCommand = new DelegateCommands();
139 AddCommand.ExecuteCommand = new Action<object>(Add);
140 UpdateCommand = new DelegateCommands();
141 UpdateCommand.ExecuteCommand = new Action<object>(Update);
142 IsokCommand = new DelegateCommands();
143 IsokCommand.ExecuteCommand = new Action<object>(Isok);
144 DeleteCommand = new DelegateCommands();
145 DeleteCommand.ExecuteCommand = new Action<object>(Delete);
146 }
147 AddOrUpdate au = new AddOrUpdate();
148 /// <summary>
149 /// 通过构造方法将实体数据,和窗体实体传入新的UserViewModel中
150 /// </summary>
151 /// <param name="_selectUser"></param>
152 /// <param name="_au"></param>
153 public UserViewModel(Users _selectUser ,AddOrUpdate _au)
154 {
155 SelectUser = _selectUser;
156 au = _au;
157 //注册命令
158 RegisterCommands();
159 }
160 /// <summary>
161 /// 显示提示信息
162 /// </summary>
163 /// <param name="txt"></param>
164 public void MsgShow(string txt)
165 {
166 System.Windows.MessageBox.Show(txt);
167 //删除后清空选择用户
168 SelectUser = null;
169 }
170 #region 注册命令
171 /// <summary>
172 /// 新增用户
173 /// </summary>
174 
175 /// <summary>
176 /// 多条件查询
177 /// </summary>
178 public DelegateCommands SelectionWhereCommand { get; set; }
179 /// <summary>
180 /// 添加
181 /// </summary>
182 public DelegateCommands AddCommand { get; set; }
183 /// <summary>
184 /// 修改
185 /// </summary>
186 public DelegateCommands UpdateCommand { get; set; }
187 /// <summary>
188 /// 保存 添加or修改
189 /// </summary>
190 public DelegateCommands IsokCommand { get; set; }
191 /// <summary>
192 /// 删除
193 /// </summary>
194 public DelegateCommands DeleteCommand { get; set; }
195 
196 /// <summary>
197 /// 刷新数据
198 /// </summary>
199 /// <param name="parameter"></param>
200 public void SelectionWhere(object parameter)
201 {
202 UserList = new ObservableCollection<Users>(db.Queryable<Users>().Where(u => ((selectWhere.U_Name == "") || (u.U_Name.Contains(selectWhere.U_Name))) && ((selectWhere.U_Sex == "全部") || (u.U_Sex == selectWhere.U_Sex))).ToList());
203 }
204 /// <summary>
205 /// 新增弹出窗体
206 /// </summary>
207 /// <param name="parameter"></param>
208 public void Add(object parameter)
209 {
210 AddOrUpdate add = new AddOrUpdate(null);
211 add.ShowDialog();//因为ShowDialog后,新的窗体未关闭,下面的代码不会执行,当关闭后会执行下面的刷新数据操作
212 SelectionWhere(null);
213 }
214 /// <summary>
215 /// 修改弹出窗体
216 /// </summary>
217 /// <param name="parameter"></param>
218 public void Update(object parameter)
219 {
220 //parameter 因为在XML前端进行绑定的时候传入参数ID
221 //下面进行类型转换就可以使用了
222 Users u = db.Queryable<Users>().Where(us => us.U_ID == Convert.ToInt32(parameter)).First();
223 AddOrUpdate add = new AddOrUpdate(u);
224 add.ShowDialog();//因为ShowDialog后,新的窗体未关闭,下面的代码不会执行,当关闭后会执行下面的刷新数据操作
225 SelectionWhere(null);
226 }
227 /// <summary>
228 /// 保存 新增or修改执行操作
229 /// </summary>
230 /// <param name="parameter"></param>
231 public void Isok(object parameter)
232 { //因为没有写部门的控件就将就设置一下
233 SelectUser.D_ID = 1;
234 //判断这个实体有没有ID,如果没有执行新增,反之执行修改
235 if(SelectUser.U_ID == null)
236 {
237 var t3 = db.Insertable(SelectUser).ExecuteReturnEntity();
238 MsgShow("用户编号:" + t3.U_ID + "\n新增成功!");
239 //之前通过构造函数将窗体的实例传过来了,执行关闭窗体
240 au.Close();
241 }
242 else
243 {
244 var t1 = db.Updateable(SelectUser).ExecuteCommand();
245 MsgShow("用户编号:" + SelectUser.U_ID + "\n修改成功!");
246 //之前通过构造函数将窗体的实例传过来了,执行关闭窗体
247 au.Close();
248 }
249 }
250 /// <summary>
251 /// 删除
252 /// </summary>
253 /// <param name="parameter"></param>
254 public void Delete(object parameter)
255 {
256 //parameter 因为在XML前端进行绑定的时候传入参数ID
257 //下面进行类型转换就可以使用了
258 var t0 = db.Deleteable<Users>().Where(u => u.U_ID == Convert.ToInt32(parameter)).ExecuteCommand();
259 MsgShow("用户编号:" + Convert.ToInt32(parameter) + "\n删除成功!");
260 SelectionWhere(null);
261 }
262 
263  
264 
265 #endregion
266 }
267 }

 

 

 

ViewModels里面CheckConverter.cs这是一个转换器,绑定单选按钮会用到

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Globalization;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 using System.Windows.Data;
 8 
 9 namespace WpfMVVM.ViewModels
10 {
11     public class CheckConverter : IValueConverter
12     {
13         public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
14         {
15             if (value == null || parameter == null)
16             {
17                 return false;
18             }
19             string checkvalue = value.ToString();
20             string targetvalue = parameter.ToString();
21             bool r = checkvalue.Equals(targetvalue);
22             return r;
23         }
24 
25         public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
26         {
27             if (value == null || parameter == null)
28             {
29                 return null;
30             }
31 
32             if ((bool)value)
33             {
34                 return parameter.ToString();
35             }
36             return null;
37         }
38     }
39 
40 }

 

标签:MVVM,改查,System,using,new,WPF,null,parameter,public
From: https://www.cnblogs.com/liuzi12138/p/17928010.html

相关文章

  • wpf + MaterialDesign + Prism8 + DataGrid 实现表格内数据编辑,下拉
    十年河东,十年河西,莫欺少年穷学无止境,精益求精效果如下: xaml如下:<UserControlx:Class="WpfApp.UserControls.MemoView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/w......
  • Unity3D MVC框架和MVVM框架优缺点详解
    Unity3D是一款非常流行的游戏开发引擎,它为开发者提供了强大的工具和功能,使得开发者能够轻松地创建各种类型的游戏。在Unity3D中,使用模型-视图-控制器(MVC)框架和模型-视图-视图模型(MVVM)框架可以更好地组织和管理游戏的逻辑和界面。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱......
  • WPF Halcon机器视觉和运动控制软件通用框架,插件式开发,开箱即用 仅供学习!
    点我下载,仅供个人学习使用参考easyvision开发,集成几十个软件算子此版本以添加ui设计器。具体功能如上所示,可以自定义变量,写c#脚本,自定义流程,包含了halcon脚本和封装的算子,可自定义ui,通过插件形式开发很方便拓展自己的功能。......
  • Mysql基础增删改查语句
    一,基础语句1.增加Insert(特殊的如果id自动递增的话,就不需要插入id)基本语法 insertinto表名(列1,列2,列3,列4,...) values(值,值,值)例子 insertintostudent(name,sex,age)values('张三',18,'男')插入的另外一种形式:insertinto表名set列=值,列=值,列=值,....例子 insertinto......
  • wpf + MaterialDesign + Prism8 + DataGrid 实现表格数据+分页
    十年河东,十年河西,莫欺少年穷学完止境,精益求精1、不分页,带有排序功能(每个字段都可以排序) xaml如下:<UserControlx:Class="WpfApp.UserControls.UserView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:......
  • 深入理解WPF中的Dispatcher:优化UI操作的关键
     概述:Dispatcher是WPF中用于协调UI线程和非UI线程操作的关键类,通过消息循环机制确保UI元素的安全更新。常见用途包括异步任务中的UI更新和定时器操作。在实践中,需注意避免UI线程阻塞、死锁,并使用CheckAccess方法确保在正确的线程上执行操作。这有助于提升应用程序的性能和用户......
  • 使用MVVM Toolkit简化WPF开发
    最近.NET8的WPF推出了 WPFFileDialog改进,这样无需再引用 Win32 命名空间就可以实现文件夹的选择与存储了,算是一个很方便的改进了。顺手写了一个小的WPF程序,在使用 Model-View-ViewModel(MVVM) 模式的时候,我不想使用 Prism 等重量级的框架,找了一个轻量级的MVVMCo......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发
    https://www.cnblogs.com/wuhuacong/tag/WPF/ 在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基......
  • WPF MvvmToolkit入门
    最新.net6wpfMVVMToolkit8.0工程搭建。MVVMToolkit是一个轻量级MVVM框架,在框架下我们第一个要做的就是搞清在此框架下的一些常规操作:属性绑定和通知,命令绑定,消息传递。搞懂这些处理流程,然后就可以写自己业务的逻辑。1.安装mvvmtoolkit1.1Nuget下载CommunityToolkit.Mvvm......
  • [WPF] 使用 MVVM Toolkit 构建 MVVM 程序(CommunityToolkit.Mvvm)
    1.什么是MVVMToolkit模型-视图-视图模型(MVVM)是用于解耦UI代码和非UI代码的UI体系结构设计模式。借助MVVM,可以在XAML中以声明方式定义UI,并使用数据绑定标记将UI链接到包含数据和命令的其他层。微软虽然提出了MVVM,但又没有提供一个官方的MVVM库(多年前有过......