WPF中如何简单的使用MvvmLight创建一个项目并进行 增删改查

news2024/11/27 18:27:10

第一步:创建项目后下载如下两个NuGet程序包,然后删除删掉using Microsoft.Practices.ServiceLocation; 并且引入using CommonServiceLocator;

 

 

 

 第二步:删除原来的XAML文件并创建如下的包结构然后创建一个在View文件夹中创建一个Main窗体   再将App.XAML中的StartupUri修改为View/Main.xaml

 

 

 

 第三步:创建Model层中的文件UserInfo和Todo

 UserInfo的类如下:

using GalaSoft.MvvmLight;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace WPF练习12简单的项目.Model
{
    public class UserInfo : ObservableObject
    {
        [Key]
        public int UserId { get; set; }

        [Required(ErrorMessage = "账号必填")]
        [Column(TypeName = "varchar(50)")]
        public string Account { get; set; }

        [Required(ErrorMessage = "密码必填")]
        [Column(TypeName = "varchar(50)")]
        public string Pwd { get; set; }
    }
}

 Todo的类如下:

 

using GalaSoft.MvvmLight;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace WPF练习12简单的项目.Model
{
    public class Todo:ObservableObject
    {
        [Key]
        public int TodoId { get; set; }

        [Required(ErrorMessage = "任务标题必填")]
        [Column(TypeName = "varchar(50)")]
        public string Title { get; set; }

        [Column(TypeName = "varchar(150)")]
        public string Detail { get; set; }

        [Required(ErrorMessage = "是否完成必填")]
        [Column(TypeName = "bit")]
        public bool IsCompleted { get; set; } = false;

        [Required(ErrorMessage = "创建人Id必填")]
        [Column(TypeName = "int")]
        public int CreateUserId { get; set; }

        [Required(ErrorMessage = "创建日期必填")]
        [Column(TypeName = "datetime")]
        public DateTime CreateTime { get; set; } = DateTime.Now;
    }
}

 第四步:创建Service层IUserInfoService接口和ITodoService接口

IUserInfoService接口如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF练习12简单的项目.Model;

namespace WPF练习12简单的项目.Service
{
    public interface IUserInfoService
    {
        bool Add(UserInfo model);
        bool Delete(int id);
        bool Update(UserInfo model);
        List<UserInfo> GetList(string strWhere);
        List<UserInfo> GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex);
        UserInfo GetModel(int id);
    }
}

ITodoService接口如下:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF练习12简单的项目.Model;

namespace WPF练习12简单的项目.Service
{
    public interface ITodoService
    {
        bool Add(Todo model);
        bool Delete(int id);
        bool Update(Todo model);
        List<Todo> GetList(string strWhere);
        List<Todo> GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex);
        int GetCount(string strWhere);
        Todo GetModel(int id);
    }
}

 第五步:配置连接字符串 并将连接的内容封装到Tool文件夹中的ConstHelper

 

 ConstHelper类如下:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WPF练习12简单的项目.Tool
{
    public static class ConstHelper
    {
        public static string ConnectionString { get; } = ConfigurationManager.ConnectionStrings["connString"].ConnectionString;
    }
}

第六步:在ServiceImpl文件夹实现Service层中的接口

UserInfoService类如下:

using Dapper;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF练习12简单的项目.Model;
using WPF练习12简单的项目.Service;
using WPF练习12简单的项目.Tool;

namespace WPF练习12简单的项目.ServiceImpl
{
    public class UserInfoService:IUserInfoService
    {
        public bool Add(UserInfo model)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "INSERT INTO UserInfo(Account, Pwd) VALUES (@Account, @Pwd)";
                return conn.Execute(sql, model) > 0;
            }
        }

        public bool Delete(int id)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "DELETE FROM UserInfo WHERE UserId=@UserId";
                var paramter = new { UserId = id };
                return conn.Execute(sql, paramter) > 0;
            }
        }

        public List<UserInfo> GetList(string strWhere)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "SELECT UserId, Account, Pwd FROM UserInfo WHERE 1=1 ";
                if (!string.IsNullOrEmpty(strWhere)) sql += $" AND {strWhere}";
                return conn.Query<UserInfo>(sql).ToList();
            }
        }

        public List<UserInfo> GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                StringBuilder sql = new StringBuilder();
                sql.Append("SELECT * FROM ( ");
                sql.Append(" SELECT ROW_NUMBER() OVER (");

                if (!string.IsNullOrEmpty(orderBy.Trim()))
                    sql.Append("ORDER BY T." + orderBy);
                else
                    sql.Append("ORDER BY T.UserId DESC");

                sql.Append(")AS Row, T.*  FROM [User] T ");
                if (!string.IsNullOrEmpty(strWhere.Trim()))
                {
                    sql.Append(" WHERE " + strWhere);
                }
                sql.Append(" ) TT");
                sql.AppendFormat(" WHERE TT.Row BETWEEN {0} AND {1}", startIndex, endIndex);

                return conn.Query<UserInfo>(sql.ToString()).ToList();
            }
        }

        public UserInfo GetModel(int id)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "SELECT UserId, Account, Pwd FROM UserInfo WHERE UserId=@UserId";
                var parameter = new { UserId = id };
                return conn.QueryFirstOrDefault<UserInfo>(sql, parameter);
            }
        }

        public bool Update(UserInfo model)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "UPDATE UserInfo SET Account=@Account, Pwd=@Pwd WHERE UserId=@UserId";
                return conn.Execute(sql, model) > 0;
            }
        }
    }
}

TodoService类如下:

using Dapper;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WPF练习12简单的项目.Model;
using WPF练习12简单的项目.Service;
using WPF练习12简单的项目.Tool;

namespace WPF练习12简单的项目.ServiceImpl
{
    public class TodoService : ITodoService
    {
        public bool Add(Todo model)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "INSERT INTO [Todo](Title, Detail, IsCompleted, CreateUserId, CreateTime) VALUES (@Title, @Detail, @IsCompleted, @CreateUserId, @CreateTime)";
                return conn.Execute(sql, model) > 0;
            }
        }

        public bool Delete(int id)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "DELETE FROM [Todo] WHERE TodoId=@TodoId";
                var paramter = new { TodoId = id };
                return conn.Execute(sql, paramter) > 0;
            }
        }

        public List<Todo> GetList(string strWhere)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "SELECT TodoId, Title, Detail, IsCompleted, CreateUserId, CreateUserName, CreateTime FROM [TodoView] WHERE 1=1 ";
                if (!string.IsNullOrEmpty(strWhere)) sql += $" AND {strWhere}";
                return conn.Query<Todo>(sql).ToList();
            }
        }

        public List<Todo> GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                StringBuilder sql = new StringBuilder();
                sql.Append("SELECT * FROM ( ");
                sql.Append(" SELECT ROW_NUMBER() OVER (");

                if (!string.IsNullOrEmpty(orderBy.Trim()))
                    sql.Append("ORDER BY T." + orderBy);
                else
                    sql.Append("ORDER BY T.TodoId DESC");

                sql.Append(")AS Row, T.*  FROM [TodoView] T ");
                if (!string.IsNullOrEmpty(strWhere.Trim()))
                {
                    sql.Append(" WHERE " + strWhere);
                }
                sql.Append(" ) TT");
                sql.AppendFormat(" WHERE TT.Row BETWEEN {0} AND {1}", startIndex, endIndex);

                return conn.Query<Todo>(sql.ToString()).ToList();
            }
        }

        public int GetCount(string strWhere)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "SELECT COUNT(TodoId) FROM [Todo] WHERE 1=1 ";
                if (!string.IsNullOrEmpty(strWhere)) sql += $" AND {strWhere}";
                return conn.ExecuteScalar<int>(sql);
            }
        }

        public Model.Todo GetModel(int id)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "SELECT TodoId, Title, Detail, IsCompleted, CreateUserId, CreateTime FROM [Todo] WHERE TodoId=@TodoId";
                var parameter = new { TodoId = id };
                return conn.QueryFirstOrDefault<Model.Todo>(sql, parameter);
            }
        }

        public bool Update(Model.Todo model)
        {
            using (var conn = new SqlConnection(ConstHelper.ConnectionString))
            {
                conn.Open();
                var sql = "UPDATE [Todo] SET Title=@Title, Detail=@Detail, IsCompleted=@IsCompleted, CreateUserId=@CreateUserId, CreateTime=@CreateTime WHERE TodoId=@TodoId";
                return conn.Execute(sql, model) > 0;
            }
        }
    }
}

第七步:在View文件夹中创建Login.XAML文件 并将App.XAML文件进行修改

1.将StartupUri删除

2.添加 ShutdownMode="OnExplicitShutdown"和Startup="Application_Startup"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232521.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java项目之校园资料分享平台(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的校园资料分享平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 校园资料分享平台的主要…

Spring Security-02-Spring Security认证方式-HTTP基本认证、Form表单认证、HTTP摘要认证、前后端分离安全处理方案

Lison <dreamlison163.com>, v1.0.0, 2024.06.01 Spring Security-02-Spring Security认证方式-HTTP基本认证、Form表单认证、HTTP摘要认证、前后端分离安全处理方案 文章目录 Spring Security-02-Spring Security认证方式-HTTP基本认证、Form表单认证、HTTP摘要认证、…

2-9 存储管理

9.1 传统磁盘管理 1.添加磁盘 在关闭虚拟机情况下添加磁盘(SATA) 别忘记点确定&#xff01;&#xff01;&#xff01; 重启虚拟机&#xff0c;并查看磁盘情况 [rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 20G…

word及Excel常见功能使用

最近一直在整理需规文档及表格&#xff0c;Word及Excel需要熟练使用。 Word文档 清除复制过来的样式 当复制文字时&#xff0c;一般会带着字体样式&#xff0c;此时可选中该文字 并使用 ctrlshiftN 快捷键进行清除。 批注 插入->批注&#xff0c;选中文本 点击“批注”…

【Linux 27】HTTP 协议中的 cookie 和 session

文章目录 &#x1f308;一、Cookie 的相关概念⭐ 1. Cookie 的概念⭐ 2. Cookie 的工作原理⭐ 3. Cookie 的分类⭐ 4. Cookie 的用途⭐ 5. Cookie 设置的基本格式⭐ 6. Cookie 设置时的注意事项⭐ 7. Cookie 的生命周期⭐ 8. Cookie 的安全性问题 &#x1f308; 二、Session 的…

SQL用一个字段查询出数据的交集

出个SQL查询的题吧&#xff0c;有兴趣的可以看看 1、问题 下面有一份数据&#xff08;图1&#xff09;&#xff0c;由两部分组成&#xff1a;分析数据和基准数据 分析数据标识列为1&#xff0c;基准数据标识列为1&#xff0c;两字段0,1互斥 要求&#xff1a;按找出两部分数据…

后端java——如何为你的网页设置一个验证码

目录 1、工具的准备 2.基本方法 3.实现类 4.实践 HTML文件&#xff1a; Java文件1:创建验证码 Java文件2:验证验证码 本文通过HUTOOL实现&#xff1a;Hutool参考文档Hutool&#xff0c;Java工具集https://hutool.cn/docs/#/ 1、工具的准备 如果我们通过hutool来实现这个…

【Python单元测试】pytest框架单元测试 配置 命令行操作 测试报告 覆盖率

单元测试&#xff08;unit test&#xff09;&#xff0c;简称UT。本文将介绍在Python项目中&#xff0c;pytest测试框架的安装&#xff0c;配置&#xff0c;执行&#xff0c;测试报告与覆盖率 pytest简介 pytest是一款流行的&#xff0c;简单易上手的单元测试框架&#xff0c;…

HTMLCSS:呈现的3D树之美

效果演示 这段代码通过HTML和CSS创建了一个具有3D效果的树的图形&#xff0c;包括分支、树干和阴影&#xff0c;通过自定义属性和复杂的变换实现了较为逼真的立体效果。 HTML <div class"container"><div class"tree"><div class"…

练习LabVIEW第三十八题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第三十八题&#xff1a; 创建一个VI&#xff0c;实现对按钮状态的指示和按钮“按下”持续时间简单计算功能&#xff0c;按…

HomeAssistant自定义组件学习-【二】

#要说的话# 前面把中盛科技的控制器组件写完了。稍稍熟悉了一些HA&#xff0c;现在准备写窗帘控制组件&#xff0c;构想的东西会比较多&#xff0c;估计有些难度&#xff0c;过程会比较长&#xff0c;边写边记录吧&#xff01; #设备和场景环境# 使用的是Novo的电机&#xf…

Linux脚本数组与字符串

文章目录 打印数组与长度数组遍历数组赋值下标索引访问切片追加()删除关联数组(像map)字符串字符拼接截取子串字符串长度字符串替换模式匹配截取分割字符串大小写转换 打印数组与长度 ${arrayName[*]} 打印数组${arrayName[]} 打印数组${#arrayName[*]} 打印数组长度${#arrayN…

闯关leetcode——3289. The Two Sneaky Numbers of Digitville

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/the-two-sneaky-numbers-of-digitville/description/ 内容 In the town of Digitville, there was a list of numbers called nums containing integers from 0 to n - 1. Each number was suppos…

#Jest进阶知识:整合 webpack 综合练习

这一小节&#xff0c;我们来做一个综合的练习&#xff0c;该练习会整合&#xff1a; typescriptwebpackjest 准备工作 首先创建项目目录&#xff0c;通过 npm init -y 进行初始化。 整个项目我们打算使用 typescript 进行开发&#xff0c;因此需要安装 typescript npm i t…

MATLAB——矩阵操作

内容源于b站清风数学建模 数学建模清风老师《MATLAB教程新手入门篇》https://www.bilibili.com/video/BV1dN4y1Q7Kt/ 目录 1.MATLAB中的向量 1.1向量创建方法 1.2向量元素的引用 1.3向量元素修改和删除 2.MATLAB矩阵操作 2.1矩阵创建方法 2.2矩阵元素的引用 2.3矩阵…

原生鸿蒙应用市场开发者服务的技术解析:从集成到应用发布的完整体验

文章目录 引言一、鸿蒙原生应用的高效开发二、用户隐私保护&#xff1a;安全访问管理三、开发者实用工具&#xff1a;应用分析与A/B测试四、应用审核与分发&#xff1a;快速上线4.1 应用加密&#xff1a;保护代码安全4.2 自动化测试与检测前移&#xff1a;提升应用质量 五、结语…

基于SSM+微信小程序的社团登录管理系统(社团1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

虚拟化环境中的精简版 Android 操作系统 Microdroid

随着移动设备的普及和应用场景的多样化&#xff0c;安全性和隐私保护成为了移动操作系统的重要课题。Google推出的Microdroid&#xff0c;是一个专为虚拟化环境设计的精简版Android操作系统&#xff0c;旨在提供一个安全、隔离的执行环境。本文将详细介绍Microdroid的架构、功能…

手动搭建 Java Web 环境

操作场景 本文档介绍如何在 Linux 操作系统的腾讯云云服务器&#xff08;CVM&#xff09;上手动搭建 Java Web 环境。 进行手动搭建 Java Web 环境&#xff0c;您需要熟悉 Linux 命令&#xff0c;例如 CentOS 环境下通过 YUM 安装软件 等常用命令&#xff0c;并对所安装软件使…

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…