当前位置: 首页 > news >正文

电子商务网站技术方案济南百度整站seo推广

电子商务网站技术方案,济南百度整站seo推广,wordpress设置免审核,企业网站定制开发一条龙全包目录 开始前准备的数据库dbblog如下#xff1a; 第一步#xff1a;创建项目后下载四个NuGet程序包 第二步#xff1a;删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.X…目录 开始前准备的数据库dbblog如下 第一步创建项目后下载四个NuGet程序包 第二步删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML          并且在App.XAML中将启动项改为Login.XAML 1.View文件夹下面创建Login.XAML和Main.XAML  2.在App.XAML中将启动项改为Login.XAML 第三步在Model文件夹中创建BlogTypeInfo类CommentInfo类PostInfo类UserInfo类 并在Model文件夹下的View文件夹中创建BlogTypeInfoView类CommentInfoView类PostInfoView类UserInfoView类 BlogTypeInfo类如下 CommentInfo类如下 PostInfo类如下 UserInfo类如下 BlogTypeInfoView类如下 CommentInfoView类如下 PostInfoView类如下 UserInfoView类如下 第四步在View文件夹中的UserControls文件夹中创建BlogType.XAML、Comment.XAML、Post.XAML、User.XAML User.XAML如下 Post.XAML如下 Comment.XAML如下 BlogType.XAML如下 第五步在Service文件夹下创建IBase 、IBlogTypeInfo、ICommentInfo、IPostInfo、IUserInfo IBase如下 IBlogTypeInfo如下 ICommentInfo如下 IPostInfo如下 IUserInfo如下 第六步先配置好在APP.config中的connectionStrings并在Help文件夹中创建ConstHelper类中把connectionStrings放在里面 然后实现Service中的所有接口BlogTypeInfoService、CommentInfoService、PostInfoService、UserInfoService  配置connectionStrings ConstHelper如下 BlogTypeInfoService如下 CommentInfoService如下 PostInfoService如下 UserInfoService如下 第七步在App.cs文件中放入想要放入Ioc容器的对象 第八步在Helper文件夹中创建LoginInfoHelper类存放登录的用户 并在ViewModel创建LoginViewModel类和MainViewModel类 LoginViewModel如下 MainViewModel如下 第九步在Login.XAML和Main.XAML中写对应的前端代码 1.在Dict文件夹中创建LoginDictionary.xaml存放登录窗口的样式 LoginDictionary.xaml如下 2.App.XAML文件中存在共同的样式以及存放LoginDictionary.xaml的引用 3.在Login.XAML文件中创建上下文并创建基本样式  4.在Main.XAML文件中创建上下文并创建基本样式  效果如下 开始前准备的数据库dbblog如下 USE [dbblog] GO /****** Object: Table [dbo].[UserInfo] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[UserInfo]([UserId] [int] IDENTITY(1,1) NOT NULL,[UserName] [varchar](20) NOT NULL,[UserPwd] [varchar](50) NOT NULL,[Phone] [varchar](20) NOT NULL,[NickName] [varchar](20) NOT NULL,[Logo] [image] NULL,[RealName] [varchar](20) NULL,[Sex] [bit] NULL,[Birthday] [datetime] NULL,[DataStatus] [int] NOT NULL,[CreateUserId] [int] NOT NULL,[CreateTime] [datetime] NOT NULL,[LastUpdateUserId] [int] NULL,[LastUpdateTime] [datetime] NULL,CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED ([UserId] ASC )WITH (PAD_INDEX OFF, STATISTICS_NORECOMPUTE OFF, IGNORE_DUP_KEY OFF, ALLOW_ROW_LOCKS ON, ALLOW_PAGE_LOCKS ON, OPTIMIZE_FOR_SEQUENTIAL_KEY OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: View [dbo].[UserInfoView] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create view [dbo].[UserInfoView] as select ui1.[UserId],ui1.[UserName],ui1.[UserPwd],ui1.[Phone],ui1.[NickName],ui1.[Logo],ui1.[RealName],ui1.[Sex],ui1.[Birthday],ui1.[DataStatus],case ui1.[DataStatus] when 0 then 正常 when 1 then 禁用 else 未知 end as DataStatusText,ui1.[CreateUserId],ui2.[UserName] as CreateUserName,ui1.[CreateTime],ui1.[LastUpdateUserId],ui3.[UserName] as LastUpdateUserName,ui1.[LastUpdateTime] from UserInfo as ui1 left join UserInfo as ui2 on ui1.CreateUserId ui2.UserId left join UserInfo as ui3 on ui1.LastUpdateUserId ui2.UserId GO /****** Object: Table [dbo].[BlogTypeInfo] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[BlogTypeInfo]([BlogTypeId] [int] IDENTITY(1,1) NOT NULL,[TypeName] [varchar](50) NOT NULL,[ParentBlogTypeId] [int] NOT NULL,[DataStatus] [int] NOT NULL,[CreateUserId] [int] NOT NULL,[CreateTime] [datetime] NOT NULL,[LastUpdateUserId] [int] NULL,[LastUpdateTime] [datetime] NULL,CONSTRAINT [PK_BlogTypeInfo] PRIMARY KEY CLUSTERED ([BlogTypeId] ASC )WITH (PAD_INDEX OFF, STATISTICS_NORECOMPUTE OFF, IGNORE_DUP_KEY OFF, ALLOW_ROW_LOCKS ON, ALLOW_PAGE_LOCKS ON, OPTIMIZE_FOR_SEQUENTIAL_KEY OFF) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: View [dbo].[BlogTypeInfoView] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create view [dbo].[BlogTypeInfoView] as select bti.[BlogTypeId],bti.[TypeName],bti.[ParentBlogTypeId],bti2.[TypeName] as ParentBlogTypeName,bti.[DataStatus],case bti.[DataStatus] when 0 then 正常 when 1 then 禁用 else 未知 end as DataStatusText,bti.[CreateUserId],ui1.[UserName] as CreateUserName,bti.[CreateTime],bti.[LastUpdateUserId],ui2.[UserName] as LastUpdateUserName,bti.[LastUpdateTime] from blogtypeinfo as bti left join blogtypeinfo as bti2 on bti.parentblogtypeidbti2.blogtypeid left join userinfo as ui1 on bti.createuseridui1.userid left join userinfo as ui2 on bti.lastupdateuseridui2.userid GO /****** Object: Table [dbo].[CommentInfo] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[CommentInfo]([CommentId] [int] IDENTITY(1,1) NOT NULL,[CommentContent] [varchar](250) NOT NULL,[DataStatus] [int] NOT NULL,[CreateUserId] [int] NOT NULL,[CreateTime] [datetime] NOT NULL,[LastUpdateUserId] [int] NULL,[LastUpdateTime] [datetime] NULL,CONSTRAINT [PK_CommentInfo] PRIMARY KEY CLUSTERED ([CommentId] ASC )WITH (PAD_INDEX OFF, STATISTICS_NORECOMPUTE OFF, IGNORE_DUP_KEY OFF, ALLOW_ROW_LOCKS ON, ALLOW_PAGE_LOCKS ON, OPTIMIZE_FOR_SEQUENTIAL_KEY OFF) ON [PRIMARY] ) ON [PRIMARY] GO /****** Object: View [dbo].[CommentInfoView] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO create view [dbo].[CommentInfoView] as SELECT ci.[CommentId],ci.[CommentContent],ci.[DataStatus],case ci.[DataStatus] when 0 then 正常 when 1 then 禁用 else 未知 end as DataStatusText,ci.[CreateUserId],ui1.[UserName] as CreateUserName,ci.[CreateTime],ci.[LastUpdateUserId],ui2.[UserName] as LastUpdateUserName,ci.[LastUpdateTime]FROM [dbo].[CommentInfo] as cileft join userinfo as ui1 on ci.createuseridui1.userid left join userinfo as ui2 on ci.lastupdateuseridui2.useridGO /****** Object: Table [dbo].[PostInfo] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[PostInfo]([PostId] [int] IDENTITY(1,1) NOT NULL,[Title] [varchar](50) NOT NULL,[PostContent] [text] NOT NULL,[BlogTypeId] [int] NOT NULL,[LikeCount] [int] NOT NULL,[HateCount] [int] NOT NULL,[ReadCount] [int] NOT NULL,[CommentCount] [int] NOT NULL,[DataStatus] [int] NOT NULL,[CreateUserId] [int] NOT NULL,[CreateTime] [datetime] NOT NULL,[LastUpdateUserId] [int] NULL,[LastUpdateTime] [datetime] NULL,CONSTRAINT [PK_PostInfo] PRIMARY KEY CLUSTERED ([PostId] ASC )WITH (PAD_INDEX OFF, STATISTICS_NORECOMPUTE OFF, IGNORE_DUP_KEY OFF, ALLOW_ROW_LOCKS ON, ALLOW_PAGE_LOCKS ON, OPTIMIZE_FOR_SEQUENTIAL_KEY OFF) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO /****** Object: View [dbo].[PostInfoView] Script Date: 2024/11/5 17:42:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GOcreate view [dbo].[PostInfoView] as SELECT poi.[PostId],poi.[Title],poi.[PostContent],poi.[BlogTypeId],bti.[TypeName] as BlogTypeName,poi.[LikeCount],poi.[HateCount],poi.[ReadCount],poi.[CommentCount],poi.[DataStatus],case poi.[DataStatus] when 0 then 正常 when 1 then 禁用 else 未知 end as DataStatusText,poi.[CreateUserId],ui1.[UserName] as CreateUserName,poi.[CreateTime],poi.[LastUpdateUserId],ui2.[UserName] as LastUpdateUserName,poi.[LastUpdateTime]FROM [dbo].[PostInfo] as poileft join blogtypeinfo as bti on poi.blogtypeidbti.blogtypeIdleft join userinfo as ui1 on poi.createuseridui1.userid left join userinfo as ui2 on poi.lastupdateuseridui2.useridGO ALTER TABLE [dbo].[BlogTypeInfo] ADD CONSTRAINT [DF_BlogTypeInfo_DataStatus] DEFAULT ((0)) FOR [DataStatus] GO ALTER TABLE [dbo].[BlogTypeInfo] ADD CONSTRAINT [DF_BlogTypeInfo_CreateTime] DEFAULT (getdate()) FOR [CreateTime] GO ALTER TABLE [dbo].[CommentInfo] ADD CONSTRAINT [DF_CommentInfo_DataStatus] DEFAULT ((0)) FOR [DataStatus] GO ALTER TABLE [dbo].[CommentInfo] ADD CONSTRAINT [DF_CommentInfo_CreateTime] DEFAULT (getdate()) FOR [CreateTime] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_LikeCount] DEFAULT ((0)) FOR [LikeCount] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_HateCount] DEFAULT ((0)) FOR [HateCount] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_ReadCount] DEFAULT ((0)) FOR [ReadCount] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_CommentCount] DEFAULT ((0)) FOR [CommentCount] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_DataStatus] DEFAULT ((0)) FOR [DataStatus] GO ALTER TABLE [dbo].[PostInfo] ADD CONSTRAINT [DF_PostInfo_CreateTime] DEFAULT (getdate()) FOR [CreateTime] GO ALTER TABLE [dbo].[UserInfo] ADD CONSTRAINT [DF_UserInfo_DataStatus] DEFAULT ((0)) FOR [DataStatus] GO ALTER TABLE [dbo].[UserInfo] ADD CONSTRAINT [DF_UserInfo_CreateTime] DEFAULT (getdate()) FOR [CreateTime] GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN主键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNBlogTypeId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN博客类型名称 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNTypeName GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN父级类型名称 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNParentBlogTypeId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN数据状态0正常1禁用 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNDataStatus GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNCreateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNCreateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNLastUpdateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNBlogTypeInfo, level2typeNCOLUMN,level2nameNLastUpdateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN主键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNCommentId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN评论内容 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNCommentContent GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN数据状态0正常1禁用 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNDataStatus GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNCreateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNCreateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNLastUpdateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNCommentInfo, level2typeNCOLUMN,level2nameNLastUpdateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN主键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNPostId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN标题 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNTitle GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN内容 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNPostContent GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN类型 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNBlogTypeId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN点赞数量 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNLikeCount GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN踩数量 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNHateCount GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN阅读数量 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNReadCount GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN评论数量 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNCommentCount GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN数据状态0正常1禁用 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNDataStatus GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNCreateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNCreateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNLastUpdateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNPostInfo, level2typeNCOLUMN,level2nameNLastUpdateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN主键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN用户名 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNUserName GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN密码 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNUserPwd GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN手机号 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNPhone GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN昵称 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNNickName GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN姓名 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNRealName GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN性别 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNSex GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN生日 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNBirthday GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN数据状态0正常1禁用 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNDataStatus GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNCreateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN创建日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNCreateTime GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改人外键 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNLastUpdateUserId GO EXEC sys.sp_addextendedproperty nameNMS_Description, valueN最后一次修改日期 , level0typeNSCHEMA,level0nameNdbo, level1typeNTABLE,level1nameNUserInfo, level2typeNCOLUMN,level2nameNLastUpdateTime GO第一步创建项目后下载四个NuGet程序包 第二步删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML          并且在App.XAML中将启动项改为Login.XAML 1.View文件夹下面创建Login.XAML和Main.XAML  2.在App.XAML中将启动项改为Login.XAML 第三步在Model文件夹中创建BlogTypeInfo类CommentInfo类PostInfo类UserInfo类 并在Model文件夹下的View文件夹中创建BlogTypeInfoView类CommentInfoView类PostInfoView类UserInfoView类 BlogTypeInfo类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model {public class BlogTypeInfo{public int BlogTypeId { get; set; }public string TypeName { get; set; }public int ParentBlogTypeId { get; set; }public int DataStatus { get; set; } 0;public int CreateUserId { get; set; }public DateTime CreateTime { get; set; } DateTime.Now;public int LastUpdateUserId { get; set; }public DateTime LastUpdateTime { get; set; }} }CommentInfo类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model {public class CommentInfo{public int CommentId { get; set; }public string CommentContent { get; set; }public int DataStatus { get; set; } 0;public int CreateUserId { get; set; }public DateTime CreateTime { get; set; } DateTime.Now;public int LastUpdateUserId { get; set; }public DateTime LastUpdateTime { get; set; }} }PostInfo类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model {public class PostInfo{public int PostId { get; set; }public string Title { get; set; }public string PostContent { get; set; }public int BlogTypeId { get; set; }public int LikeCount { get; set; } 0;public int HateCount { get; set; } 0;public int ReadCount { get; set; } 0;public int CommentCount { get; set; } 0;public int DataStatus { get; set; } 0;public int CreateUserId { get; set; }public DateTime CreateTime { get; set; } DateTime.Now;public int LastUpdateUserId { get; set; }public DateTime LastUpdateTime { get; set; }} }UserInfo类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model {public class UserInfo{public int UserId { get; set; }public string UserName { get; set; }public string UserPwd { get; set; }public string Phone { get; set; }public string NickName { get; set; }public byte[] Logo { get; set; }public string RealName { get; set; }public bool Sex { get; set; }public DateTime Birthday { get; set; }public int DataStatus { get; set; } 0;public int CreateUserId { get; set; }public DateTime CreateTime { get; set; } DateTime.Now;public int LastUpdateUserId { get; set; }public DateTime LastUpdateTime { get; set; }} }BlogTypeInfoView类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model.View {public class BlogTypeInfoView : BlogTypeInfo{public string ParentBlogTypeName { get; set; }public string DataStatusText { get; set; }public string CreateUserName { get; set; }public int LastUpdateUserName { get; set; }} }CommentInfoView类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model.View {public class CommentInfoView : CommentInfo{public string DataStatusText { get; set; }public string CreateUserName { get; set; }public int LastUpdateUserName { get; set; }} }PostInfoView类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model.View {public class PostInfoView : PostInfo{public string BlogTypeName { get; set; }public string DataStatusText { get; set; }public string CreateUserName { get; set; }public int LastUpdateUserName { get; set; }} }UserInfoView类如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Model.View {public class UserInfoView : UserInfo{public string DataStatusText { get; set; }public string CreateUserName { get; set; }public int LastUpdateUserName { get; set; }} }第四步在View文件夹中的UserControls文件夹中创建BlogType.XAML、Comment.XAML、Post.XAML、User.XAML User.XAML如下 UserControl x:ClassWPF练习13简单的项目.View.UserControls.Userxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF练习13简单的项目.View.UserControlsmc:Ignorabled d:DesignHeight450 d:DesignWidth800GridTextBlock Text1 //Grid /UserControlPost.XAML如下 UserControl x:ClassWPF练习13简单的项目.View.UserControls.Postxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF练习13简单的项目.View.UserControlsmc:Ignorabled d:DesignHeight450 d:DesignWidth800GridTextBlock Text2 //Grid /UserControlComment.XAML如下 UserControl x:ClassWPF练习13简单的项目.View.UserControls.Commentxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF练习13简单的项目.View.UserControlsmc:Ignorabled d:DesignHeight450 d:DesignWidth800GridTextBlock Text3 //Grid /UserControlBlogType.XAML如下 UserControl x:ClassWPF练习13简单的项目.View.UserControls.BlogTypexmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006 xmlns:dhttp://schemas.microsoft.com/expression/blend/2008 xmlns:localclr-namespace:WPF练习13简单的项目.View.UserControlsmc:Ignorabled d:DesignHeight450 d:DesignWidth800GridTextBlock Text4 //Grid /UserControl第五步在Service文件夹下创建IBase 、IBlogTypeInfo、ICommentInfo、IPostInfo、IUserInfo IBase如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Service {public interface IBaseT,K{/// summary/// 添加数据/// /summary/// param namemodel模型/param/// returns布尔/returnsbool Add(T model);/// summary/// 删除/// /summary/// param nameid主键/param/// returns布尔/returnsbool Delete(int id);/// summary/// 分页获取数据/// /summary/// param namestrWhere查询条件/param/// param nameorderBy排序字段/param/// param namestartIndex起始索引/param/// param nameendIndex结束索引/param/// returns列表关联视图模型K/returnsListK GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex);/// summary/// 获取单个模型/// /summary/// param nameid主键/param/// returns泛型T/returnsT GetModel(int id);/// summary/// 修改/// /summary/// param namemodel模型/param/// returns布尔/returnsbool Update(T model);} }IBlogTypeInfo如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Model;namespace WPF练习13简单的项目.Service {public interface IBlogTypeInfo : IBaseBlogTypeInfo, BlogTypeInfoView{} }ICommentInfo如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Model;namespace WPF练习13简单的项目.Service {public interface ICommentInfo : IBaseCommentInfo, CommentInfoView{} }IPostInfo如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Model;namespace WPF练习13简单的项目.Service {public interface IPostInfo : IBasePostInfo, PostInfoView{} }IUserInfo如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Model.View;namespace WPF练习13简单的项目.Service {public interface IUserInfo : IBaseUserInfo, UserInfoView{UserInfo Login(string userName, string userPwd);} }第六步先配置好在APP.config中的connectionStrings并在Help文件夹中创建ConstHelper类中把connectionStrings放在里面 然后实现Service中的所有接口BlogTypeInfoService、CommentInfoService、PostInfoService、UserInfoService  配置connectionStrings ConstHelper如下 using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WPF练习13简单的项目.Helper {public static class ConstHelper{public static string ConnString { get; } ConfigurationManager.ConnectionStrings[connString].ConnectionString;} }BlogTypeInfoService如下 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Service; using Dapper; using WPF练习13简单的项目.Helper;namespace WPF练习13简单的项目.ServiceImpl {public class BlogTypeInfoService : IBlogTypeInfo{public bool Add(BlogTypeInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql INSERT INTO BlogTypeInfo(TypeName,ParentBlogTypeId,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime) VALUES (TypeName,ParentBlogTypeId,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime);return conn.Execute(sql, model) 0;}}public bool Delete(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE BlogTypeInfo Set DataStatus1 WHERE BlogTypeIdBlogTypeId;var param new { BlogTypeId id };return conn.Execute(sql, param) 0;}}public ListBlogTypeInfoView GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex){using (var conn new SqlConnection(ConstHelper.ConnString)){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);elsesql.Append(ORDER BY T.UserId DESC);sql.Append()AS Row, T.* FROM BlogTypeInfoView 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.QueryBlogTypeInfoView(sql.ToString()).ToList();}}public BlogTypeInfo GetModel(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql SELECT * FROM BlogTypeInfo WHERE BlogTypeIdBlogTypeId;var param new { BlogTypeId id };return conn.QueryFirstOrDefaultBlogTypeInfo(sql, param);}}public bool Update(BlogTypeInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE BlogTypeInfo SET TypeNameTypeName,ParentBlogTypeIdParentBlogTypeId,DataStatusDataStatus,CreateUserIdCreateUserId,CreateTimeCreateTime,LastUpdateUserIdLastUpdateUserId,LastUpdateTimeLastUpdateTime WHERE BlogTypeIdBlogTypeId;return conn.Execute(sql, model) 0;}}} }CommentInfoService如下 using Dapper; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Helper; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Service;namespace WPF练习13简单的项目.ServiceImpl {public class CommentInfoService : ICommentInfo{public bool Add(CommentInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql INSERT INTO CommentInfo(CommentContent,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime) VALUES (CommentContent,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime);return conn.Execute(sql, model) 0;}}public bool Delete(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE CommentInfo Set DataStatus1 WHERE CommentIdCommentId;var param new { CommentId id };return conn.Execute(sql, param) 0;}}public ListCommentInfoView GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex){using (var conn new SqlConnection(ConstHelper.ConnString)){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);elsesql.Append(ORDER BY T.UserId DESC);sql.Append()AS Row, T.* FROM CommentInfoView 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.QueryCommentInfoView(sql.ToString()).ToList();}}public CommentInfo GetModel(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql SELECT * FROM CommentInfo WHERE CommentIdCommentId;var param new { CommentId id };return conn.QueryFirstOrDefaultCommentInfo(sql, param);}}public bool Update(CommentInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE CommentInfo SET CommentContentCommentContent,DataStatusDataStatus,CreateUserIdCreateUserId,CreateTimeCreateTime,LastUpdateUserIdLastUpdateUserId,LastUpdateTimeLastUpdateTime WHERE CommentIdCommentId;return conn.Execute(sql, model) 0;}}} }PostInfoService如下 using Dapper; using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; using WPF练习13简单的项目.Helper; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Service;namespace WPF练习13简单的项目.ServiceImpl {public class PostInfoService: IPostInfo{public bool Add(PostInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql INSERT INTO PostInfo(Title,PostContent,BlogTypeId,LikeCount,HateCount,ReadCount,CommentCount,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime) VALUES (Title,PostContent,BlogTypeId,LikeCount,HateCount,ReadCount,CommentCount,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime);return conn.Execute(sql, model) 0;}}public bool Delete(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE PostInfo Set DataStatus1 WHERE PostIdPostId;var param new { PostId id };return conn.Execute(sql, param) 0;}}public ListPostInfoView GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex){using (var conn new SqlConnection(ConstHelper.ConnString)){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);elsesql.Append(ORDER BY T.UserId DESC);sql.Append()AS Row, T.* FROM PostInfoView 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.QueryPostInfoView(sql.ToString()).ToList();}}public PostInfo GetModel(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql SELECT * FROM PostInfo WHERE PostIdPostId;var param new { PostId id };return conn.QueryFirstOrDefaultPostInfo(sql, param);}}public bool Update(PostInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE PostInfo SET TitleTitle,PostContentPostContent,BlogTypeIdBlogTypeId,LikeCountLikeCount,HateCountHateCount,ReadCountReadCount,CommentCountCommentCount,DataStatusDataStatus,CreateUserIdCreateUserId,CreateTimeCreateTime,LastUpdateUserIdLastUpdateUserId,LastUpdateTimeLastUpdateTime WHERE PostIdPostId;return conn.Execute(sql, model) 0;}}} }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练习13简单的项目.Helper; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Model.View; using WPF练习13简单的项目.Service;namespace WPF练习13简单的项目.ServiceImpl {public class UserInfoService: IUserInfo{public bool Add(UserInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql INSERT INTO UserInfo(UserName,UserPwd,Phone,NickName,Logo,RealName,Sex,Birthday,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime) VALUES (UserName,UserPwd,Phone,NickName,Logo,RealName,Sex,Birthday,DataStatus,CreateUserId,CreateTime,LastUpdateUserId,LastUpdateTime);return conn.Execute(sql, model) 0;}}public bool Delete(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE UserInfo Set DataStatus1 WHERE UserIdUserId;var param new { UserId id };return conn.Execute(sql, param) 0;}}public ListUserInfoView GetListByPage(string strWhere, string orderBy, int startIndex, int endIndex){using (var conn new SqlConnection(ConstHelper.ConnString)){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);elsesql.Append(ORDER BY T.UserId DESC);sql.Append()AS Row, T.* FROM UserInfoView 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.QueryUserInfoView(sql.ToString()).ToList();}}public UserInfo GetModel(int id){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql SELECT * FROM UserInfo WHERE UserIdUserId;var param new { UserId id };return conn.QueryFirstOrDefaultUserInfo(sql, param);}}public UserInfo Login(string userName, string userPwd){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql SELECT * FROM UserInfo WHERE UserNameUserName AND UserPwdUserPwd;var param new { UserName userName, UserPwd userPwd };return conn.QueryFirstOrDefaultUserInfo(sql, param);}}public bool Update(UserInfo model){using (var conn new SqlConnection(ConstHelper.ConnString)){conn.Open();var sql UPDATE UserInfo SET UserNameUserName,UserPwdUserPwd,PhonePhone,NickNameNickName,LogoLogo,RealNameRealName,SexSex,BirthdayBirthday,DataStatusDataStatus,CreateUserIdCreateUserId,CreateTimeCreateTime,LastUpdateUserIdLastUpdateUserId,LastUpdateTimeLastUpdateTime WHERE UserIdUserId;return conn.Execute(sql, model) 0;}}} }第七步在App.cs文件中放入想要放入Ioc容器的对象 using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using WPF练习13简单的项目.Service; using WPF练习13简单的项目.ServiceImpl; using WPF练习13简单的项目.View; using WPF练习13简单的项目.View.UserControls;namespace WPF练习13简单的项目 {/// summary/// App.xaml 的交互逻辑/// /summarypublic partial class App : Application{public IServiceProvider Services { get; }public App(){Services ConfigurationServices();}public static new App Current { get { return (App)Application.Current; } }private IServiceProvider ConfigurationServices(){ServiceCollection services new ServiceCollection();// 放窗体services.AddSingletonMain();// 放用户控件services.AddSingletonBlogType();services.AddSingletonComment();services.AddSingletonPost();services.AddSingletonUser();// 放服务services.AddSingletonIBlogTypeInfo, BlogTypeInfoService();services.AddSingletonICommentInfo, CommentInfoService();services.AddSingletonIPostInfo, PostInfoService();services.AddSingletonIUserInfo, UserInfoService();return services.BuildServiceProvider();}} }第八步在Helper文件夹中创建LoginInfoHelper类存放登录的用户 并在ViewModel创建LoginViewModel类和MainViewModel类 using CTMVVMDemo.Model;namespace CTMVVMDemo.Helper {public static class LoginInfoHelper{public static UserInfo CurrentUser { get; set; }} }LoginViewModel如下 using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using WPF练习13简单的项目.Helper; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Service; using WPF练习13简单的项目.View;namespace WPF练习13简单的项目.ViewModel {public class LoginViewModel : ObservableObject{private readonly IUserInfo userService;public LoginViewModel(){userService App.Current.Services.GetServiceIUserInfo();}private string userName;public string UserName{get userName;set SetProperty(ref userName, value);}private SecureString password;public SecureString Password{get password;set SetProperty(ref password, value);}public RelayCommandLogin LoginCommand{get{return new RelayCommandLogin((loginWin) {Button btnLogin loginWin.FindName(btnLogin) as Button;if (btnLogin ! null) btnLogin.Focus();UserInfo userInfo userService.Login(UserName, SecureStringToString(Password));if (userInfo null){MessageBox.Show(登录失败请检查账号或密码是否正确, 错误, System.Windows.MessageBoxButton.OK, MessageBoxImage.Error);return;}LoginInfoHelper.CurrentUser userInfo;loginWin.Hide();var mainWin App.Current.Services.GetServiceMain();mainWin.Show();});}}public RelayCommandobject PasswordChangedCommand{get{return new RelayCommandobject((obj) {var passwordBox obj as PasswordBox;if (passwordBox ! null) Password passwordBox.SecurePassword;});}}/// summary/// 将 SecureString 类型的数据转换为普通的字符串类型。 https://www.cnblogs.com/CDRPS/p/18156533/// /summary/// param namesecureString要转换的 SecureString 对象。/param/// returns转换后的字符串如果转换失败则返回空字符串。/returnsprivate string SecureStringToString(SecureString secureString){// 初始化指针IntPtr ptr IntPtr.Zero;try{// 将 SecureString 转换为指针ptr Marshal.SecureStringToGlobalAllocUnicode(secureString);if (ptr ! IntPtr.Zero){// 将指针中的数据复制到一个普通的字符串return Marshal.PtrToStringUni(ptr);}else{return string.Empty;}}catch (Exception ex){// 处理异常Console.WriteLine($转换 SecureString 出错{ex.Message});return string.Empty;}finally{// 清除内存中的敏感数据if (ptr ! IntPtr.Zero){Marshal.ZeroFreeGlobalAllocUnicode(ptr);}}}} }MainViewModel如下 using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using WPF练习13简单的项目.Helper; using WPF练习13简单的项目.Model; using WPF练习13简单的项目.Service; using WPF练习13简单的项目.View.UserControls;namespace WPF练习13简单的项目.ViewModel {public class MainViewModel: ObservableObject{private readonly IUserInfo userService;public MainViewModel(){userService App.Current.Services.GetServiceIUserInfo();CurrentUser LoginInfoHelper.CurrentUser;WhichUserControl App.Current.Services.GetServiceUser();}private UserInfo currentUser;public UserInfo CurrentUser{get currentUser;set SetProperty(ref currentUser, value);}private UserControl whichUserControl;public UserControl WhichUserControl{get whichUserControl;set SetProperty(ref whichUserControl, value);}public RelayCommandstring ToggleCommand{get{return new RelayCommandstring((str) {switch (str){case 用户管理:WhichUserControl App.Current.Services.GetServiceUser();break;case 博客类型:WhichUserControl App.Current.Services.GetServiceBlogType();break;case 博客管理:WhichUserControl App.Current.Services.GetServicePost();break;case 评论管理:WhichUserControl App.Current.Services.GetServiceComment();break;default:WhichUserControl App.Current.Services.GetServiceUser();break;}});}}public RelayCommand ClosedCommand{get{return new RelayCommand(() {App.Current.Shutdown();});}}} }第九步在Login.XAML和Main.XAML中写对应的前端代码 1.在Dict文件夹中创建LoginDictionary.xaml存放登录窗口的样式 LoginDictionary.xaml如下 Application x:ClassWPF练习13简单的项目.Appxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:localclr-namespace:WPF练习13简单的项目StartupUriView/Login.xamlApplication.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionary SourceDict/LoginDictionary.xaml //ResourceDictionary.MergedDictionariesStyle x:KeyButtonDefaultTargetTypeButtonSetter PropertyFocusVisualStyleValue{x:Null} /Setter PropertyWidthValue80 /Setter PropertyHeightValue30 /Setter PropertyForegroundValue#ffffff /Setter PropertyBackgroundValue#9e6f55 /Setter PropertyBorderThicknessValue0 //StyleStyle x:KeyTextBoxDefaultTargetTypeTextBoxSetter PropertyWidthValue150 /Setter PropertyHeightValue30 /Setter PropertyVerticalContentAlignmentValueCenter /Setter PropertyPaddingValue10,0,0,0 /Setter PropertyBorderBrushValue#9e6f55 //StyleStyle x:KeyPasswordBoxDefaultTargetTypePasswordBoxSetter PropertyWidthValue150 /Setter PropertyHeightValue30 /Setter PropertyVerticalContentAlignmentValueCenter /Setter PropertyPaddingValue10,0,0,0 /Setter PropertyBorderBrushValue#9e6f55 //Style/ResourceDictionary/Application.Resources /Application2.App.XAML文件中存在共同的样式以及存放LoginDictionary.xaml的引用 Application.ResourcesResourceDictionaryResourceDictionary.MergedDictionariesResourceDictionary SourceDict/LoginDictionary.xaml //ResourceDictionary.MergedDictionariesStyle x:KeyButtonDefaultTargetTypeButtonSetter PropertyFocusVisualStyleValue{x:Null} /Setter PropertyWidthValue80 /Setter PropertyHeightValue30 /Setter PropertyForegroundValue#ffffff /Setter PropertyBackgroundValue#9e6f55 /Setter PropertyBorderThicknessValue0 //StyleStyle x:KeyTextBoxDefaultTargetTypeTextBoxSetter PropertyWidthValue150 /Setter PropertyHeightValue30 /Setter PropertyVerticalContentAlignmentValueCenter /Setter PropertyPaddingValue10,0,0,0 /Setter PropertyBorderBrushValue#9e6f55 //StyleStyle x:KeyPasswordBoxDefaultTargetTypePasswordBoxSetter PropertyWidthValue150 /Setter PropertyHeightValue30 /Setter PropertyVerticalContentAlignmentValueCenter /Setter PropertyPaddingValue10,0,0,0 /Setter PropertyBorderBrushValue#9e6f55 //Style/ResourceDictionary 3.在Login.XAML文件中创建上下文并创建基本样式  Window x:ClassWPF练习13简单的项目.View.Loginxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WPF练习13简单的项目.Viewxmlns:vmclr-namespace:WPF练习13简单的项目.ViewModelxmlns:ihttp://schemas.microsoft.com/xaml/behaviorsd:DataContext{d:DesignInstance Typevm:LoginViewModel}FocusManager.FocusedElement{Binding ElementNametxtUserName}mc:IgnorabledTitleLoginHeight450Width800Window.DataContextvm:LoginViewModel //Window.DataContextGrid HorizontalAlignmentCenterVerticalAlignmentCenterGrid.RowDefinitionsRowDefinition /RowDefinition /RowDefinition //Grid.RowDefinitionsWrapPanelLabel Content账号 /TextBox NametxtUserNameStyle{StaticResource TextBoxDefault}Template{DynamicResource TextBoxTemplate}Text{Binding UserName} //WrapPanelWrapPanel Grid.Row1Margin0,10,0,0Label Content密码 /PasswordBox NamePasswordBoxStyle{StaticResource PasswordBoxDefault}Template{DynamicResource PasswordBoxTemplate}i:Interaction.Triggersi:EventTrigger EventNamePasswordChangedi:InvokeCommandAction Command{Binding PasswordChangedCommand}CommandParameter{Binding ElementNamePasswordBox} //i:EventTrigger/i:Interaction.Triggers/PasswordBox/WrapPanelWrapPanel Grid.Row2Margin0,10,0,0HorizontalAlignmentCenterButton NamebtnLoginCommand{Binding LoginCommand}CommandParameter{Binding RelativeSource{RelativeSource AncestorTypeWindow}}Content登录IsDefaultTrueStyle{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} //WrapPanel/Grid /Window4.在Main.XAML文件中创建上下文并创建基本样式  Window x:ClassWPF练习13简单的项目.View.Mainxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WPF练习13简单的项目.Viewxmlns:vmclr-namespace:WPF练习13简单的项目.ViewModelxmlns:ihttp://schemas.microsoft.com/xaml/behaviorsd:DataContext{d:DesignInstance Typevm:MainViewModel}WindowStartupLocationCenterScreenmc:IgnorabledTitleMainHeight450Width800Window.DataContextvm:MainViewModel //Window.DataContexti:Interaction.Triggersi:EventTrigger EventNameClosedi:InvokeCommandAction Command{Binding ClosedCommand} //i:EventTrigger/i:Interaction.TriggersGridGrid.RowDefinitionsRowDefinition Height60 /RowDefinition //Grid.RowDefinitionsGrid Background#f4eeeeGrid.ColumnDefinitionsColumnDefinition /ColumnDefinition Width200 //Grid.ColumnDefinitionsWrapPanel VerticalAlignmentCenterTextBlock Padding10,0,0,0FontSize20Text博客后台管理系统 //WrapPanelWrapPanel Grid.Column1HorizontalAlignmentRightVerticalAlignmentCenterTextBlock VerticalAlignmentCenterText当前用户 /TextBlock VerticalAlignmentCenterText{Binding CurrentUser.UserName} /Button Margin10,0Command{Binding ClosedCommand}Content退出Style{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} //WrapPanel/GridGrid Grid.Row1Grid.ColumnDefinitionsColumnDefinition Width160 /ColumnDefinition //Grid.ColumnDefinitionsStackPanel Background#9e6f55Button Width160Margin0,10,0,10Command{Binding ToggleCommand}CommandParameter用户管理Content用户管理Style{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} /Button Width160Margin0,0,0,10Command{Binding ToggleCommand}CommandParameter博客类型Content博客类型Style{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} /Button Width160Margin0,0,0,10Command{Binding ToggleCommand}CommandParameter博客管理Content博客管理Style{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} /Button Width160Margin0,0,0,10Command{Binding ToggleCommand}CommandParameter评论管理Content评论管理Style{StaticResource ButtonDefault}Template{DynamicResource ButtonTemplate} //StackPanelContentControl Grid.Column1Margin10Content{Binding WhichUserControl} //Grid/Grid /Window效果如下
文章转载自:
http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn
http://www.morning.dzqr.cn.gov.cn.dzqr.cn
http://www.morning.xpzrx.cn.gov.cn.xpzrx.cn
http://www.morning.wfspn.cn.gov.cn.wfspn.cn
http://www.morning.ypzr.cn.gov.cn.ypzr.cn
http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn
http://www.morning.plxhq.cn.gov.cn.plxhq.cn
http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn
http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn
http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn
http://www.morning.wdskl.cn.gov.cn.wdskl.cn
http://www.morning.wbxtx.cn.gov.cn.wbxtx.cn
http://www.morning.c-ae.cn.gov.cn.c-ae.cn
http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn
http://www.morning.fpyll.cn.gov.cn.fpyll.cn
http://www.morning.qncqd.cn.gov.cn.qncqd.cn
http://www.morning.wpqwk.cn.gov.cn.wpqwk.cn
http://www.morning.ryfq.cn.gov.cn.ryfq.cn
http://www.morning.pshtf.cn.gov.cn.pshtf.cn
http://www.morning.bprsd.cn.gov.cn.bprsd.cn
http://www.morning.gghhmi.cn.gov.cn.gghhmi.cn
http://www.morning.zympx.cn.gov.cn.zympx.cn
http://www.morning.qmncj.cn.gov.cn.qmncj.cn
http://www.morning.heleyo.com.gov.cn.heleyo.com
http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn
http://www.morning.rszyf.cn.gov.cn.rszyf.cn
http://www.morning.rnnts.cn.gov.cn.rnnts.cn
http://www.morning.rkrl.cn.gov.cn.rkrl.cn
http://www.morning.sbqrm.cn.gov.cn.sbqrm.cn
http://www.morning.yprjy.cn.gov.cn.yprjy.cn
http://www.morning.tfcwj.cn.gov.cn.tfcwj.cn
http://www.morning.kpxky.cn.gov.cn.kpxky.cn
http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn
http://www.morning.smmby.cn.gov.cn.smmby.cn
http://www.morning.ymtbr.cn.gov.cn.ymtbr.cn
http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn
http://www.morning.yptwn.cn.gov.cn.yptwn.cn
http://www.morning.gqbks.cn.gov.cn.gqbks.cn
http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn
http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn
http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn
http://www.morning.jygsq.cn.gov.cn.jygsq.cn
http://www.morning.wsrcy.cn.gov.cn.wsrcy.cn
http://www.morning.tfrlj.cn.gov.cn.tfrlj.cn
http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn
http://www.morning.fmswb.cn.gov.cn.fmswb.cn
http://www.morning.xtqr.cn.gov.cn.xtqr.cn
http://www.morning.mqdr.cn.gov.cn.mqdr.cn
http://www.morning.gywxq.cn.gov.cn.gywxq.cn
http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn
http://www.morning.lnbyk.cn.gov.cn.lnbyk.cn
http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn
http://www.morning.tsycr.cn.gov.cn.tsycr.cn
http://www.morning.rfhm.cn.gov.cn.rfhm.cn
http://www.morning.tnhg.cn.gov.cn.tnhg.cn
http://www.morning.wwznd.cn.gov.cn.wwznd.cn
http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn
http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn
http://www.morning.zglrl.cn.gov.cn.zglrl.cn
http://www.morning.ljjph.cn.gov.cn.ljjph.cn
http://www.morning.hxcuvg.cn.gov.cn.hxcuvg.cn
http://www.morning.kphsp.cn.gov.cn.kphsp.cn
http://www.morning.kwksj.cn.gov.cn.kwksj.cn
http://www.morning.qsmch.cn.gov.cn.qsmch.cn
http://www.morning.fsjcn.cn.gov.cn.fsjcn.cn
http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.nlrp.cn.gov.cn.nlrp.cn
http://www.morning.jcjgh.cn.gov.cn.jcjgh.cn
http://www.morning.ntlxg.cn.gov.cn.ntlxg.cn
http://www.morning.kstgt.cn.gov.cn.kstgt.cn
http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn
http://www.morning.fgppj.cn.gov.cn.fgppj.cn
http://www.morning.qxxj.cn.gov.cn.qxxj.cn
http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn
http://www.morning.fjtnh.cn.gov.cn.fjtnh.cn
http://www.morning.wpsfc.cn.gov.cn.wpsfc.cn
http://www.morning.rfqkx.cn.gov.cn.rfqkx.cn
http://www.morning.gkgb.cn.gov.cn.gkgb.cn
http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn
http://www.tj-hxxt.cn/news/237309.html

相关文章:

  • 学校网站建设流程步骤兰州网站seo哪家公司好
  • django 网站开发教程淘宝流量平台
  • 自适应网站手机网站单页怎么做
  • 为什么网站建设需要每年续费1688电脑网页版
  • 网站开发研发合同网页在线制作图片
  • 制作网站主要包括哪些步骤ui网站界面设计模板
  • 调查问卷网站建设心跳直播视频免费下载
  • 做网站需要哪些人员网页设计实验报告3000字
  • 网站怎么做看起来好看摄影网站建设策划书
  • 网站用什么软件程序做国外好的网站
  • 做男装比较好的网站有哪些有没有便宜做网站的 我要做个
  • 做家教有什么好的资料网站手机网站有吗
  • seo批量建站dw网页
  • 网站建设心得体会范文wordpress发文章后显示两篇
  • dedecms网站地图制作手表排名哪个网站好
  • 用html怎么做网站尾部wordpress有什么缺点
  • mc做弊端网站金州网站建设
  • 购物网站的推广摄影作品投稿网站
  • wordpress之家aso优化软件
  • 响应式企业网站系统如何制作史莱姆 简单
  • 网站模板后台怎么做建设网站比较好
  • 软件外包公司联系方式seo推广是什么工作
  • 做网站后要回源码有何用群晖外网访问wordpress时格式变完
  • 顺德网站设计制作免费咨询医生回答
  • 研究院网站模板二手书屋网站开发的意义
  • 网站首页页面设计漳州网站建设公司首选公司
  • 如何免费推广自己的网站能不能自己做网站推广
  • 网站制作开发及优化是什么网站为何要屏蔽百度蜘蛛
  • 南京做网站优化价格贵阳做网站公司排名
  • 网站自助授权系统朔州网站建设电话