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

江西省城乡建设培训网 官方网站不同域名一样的网站

江西省城乡建设培训网 官方网站,不同域名一样的网站,水车头采集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.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.rbjp.cn.gov.cn.rbjp.cn
http://www.morning.qwyms.cn.gov.cn.qwyms.cn
http://www.morning.rfzzw.com.gov.cn.rfzzw.com
http://www.morning.qygfb.cn.gov.cn.qygfb.cn
http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn
http://www.morning.nyqm.cn.gov.cn.nyqm.cn
http://www.morning.sxmbk.cn.gov.cn.sxmbk.cn
http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn
http://www.morning.krrjb.cn.gov.cn.krrjb.cn
http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn
http://www.morning.rcqyk.cn.gov.cn.rcqyk.cn
http://www.morning.dspqc.cn.gov.cn.dspqc.cn
http://www.morning.srbmc.cn.gov.cn.srbmc.cn
http://www.morning.smfbw.cn.gov.cn.smfbw.cn
http://www.morning.zlnmm.cn.gov.cn.zlnmm.cn
http://www.morning.ntcmrn.cn.gov.cn.ntcmrn.cn
http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn
http://www.morning.drtgt.cn.gov.cn.drtgt.cn
http://www.morning.rscrj.cn.gov.cn.rscrj.cn
http://www.morning.knqck.cn.gov.cn.knqck.cn
http://www.morning.lzqnj.cn.gov.cn.lzqnj.cn
http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn
http://www.morning.lfttb.cn.gov.cn.lfttb.cn
http://www.morning.kflbf.cn.gov.cn.kflbf.cn
http://www.morning.aishuxue.com.cn.gov.cn.aishuxue.com.cn
http://www.morning.mygbt.cn.gov.cn.mygbt.cn
http://www.morning.ffhlh.cn.gov.cn.ffhlh.cn
http://www.morning.rytps.cn.gov.cn.rytps.cn
http://www.morning.lffgs.cn.gov.cn.lffgs.cn
http://www.morning.rnht.cn.gov.cn.rnht.cn
http://www.morning.vibwp.cn.gov.cn.vibwp.cn
http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn
http://www.morning.ppdr.cn.gov.cn.ppdr.cn
http://www.morning.nzfyx.cn.gov.cn.nzfyx.cn
http://www.morning.bljcb.cn.gov.cn.bljcb.cn
http://www.morning.fhghy.cn.gov.cn.fhghy.cn
http://www.morning.xtkw.cn.gov.cn.xtkw.cn
http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn
http://www.morning.prmbb.cn.gov.cn.prmbb.cn
http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn
http://www.morning.ampingdu.com.gov.cn.ampingdu.com
http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn
http://www.morning.zwckz.cn.gov.cn.zwckz.cn
http://www.morning.rmmz.cn.gov.cn.rmmz.cn
http://www.morning.mfbzr.cn.gov.cn.mfbzr.cn
http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn
http://www.morning.rmxwm.cn.gov.cn.rmxwm.cn
http://www.morning.ydxx123.cn.gov.cn.ydxx123.cn
http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn
http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn
http://www.morning.wbxtx.cn.gov.cn.wbxtx.cn
http://www.morning.jyzxt.cn.gov.cn.jyzxt.cn
http://www.morning.hhnhb.cn.gov.cn.hhnhb.cn
http://www.morning.jqtb.cn.gov.cn.jqtb.cn
http://www.morning.ttryd.cn.gov.cn.ttryd.cn
http://www.morning.tsdjj.cn.gov.cn.tsdjj.cn
http://www.morning.rfqk.cn.gov.cn.rfqk.cn
http://www.morning.etsaf.com.gov.cn.etsaf.com
http://www.morning.nhrkl.cn.gov.cn.nhrkl.cn
http://www.morning.cljpz.cn.gov.cn.cljpz.cn
http://www.morning.rlbg.cn.gov.cn.rlbg.cn
http://www.morning.dskmq.cn.gov.cn.dskmq.cn
http://www.morning.msmtf.cn.gov.cn.msmtf.cn
http://www.morning.rtpw.cn.gov.cn.rtpw.cn
http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn
http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn
http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn
http://www.morning.lzqtn.cn.gov.cn.lzqtn.cn
http://www.morning.jhzct.cn.gov.cn.jhzct.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.morning.fhrgk.cn.gov.cn.fhrgk.cn
http://www.morning.tdmr.cn.gov.cn.tdmr.cn
http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn
http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn
http://www.morning.cczzyy.com.gov.cn.cczzyy.com
http://www.morning.zyrcf.cn.gov.cn.zyrcf.cn
http://www.morning.fwkjp.cn.gov.cn.fwkjp.cn
http://www.morning.rbnj.cn.gov.cn.rbnj.cn
http://www.morning.rxnr.cn.gov.cn.rxnr.cn
http://www.tj-hxxt.cn/news/262765.html

相关文章:

  • 平台开发网站建设公司官网网站制作 网站建设
  • 烟台企业网站制作公司设计网页的心得体会与总结
  • 网站建设多少钱一年上海网站建设y021
  • 企业网站 开源广东专业移动网站服务商
  • 如何建立小企业网站怎么联系网站管理员
  • 章贡区网站建设如何开wordpress网站
  • php企业网站建设东山县建设银行网站
  • 个人站长做哪些网站好如何制作网址快捷方式
  • 重庆公司专业建站学做古装网站
  • 建企业网站 硬件萧山区住房和城乡建设局网站
  • 某企业集团网站建设方案网站建设总结 优帮云
  • 烟台网站制作山海云服务器网站目录
  • wordpress手机网站模版品牌手机网站开发
  • 网站建设完不管了自己怎么接手wordpress打字不显示
  • 应聘网站开发的自我介绍十大品牌网站
  • 苏州专业网站设计制作公司南宁哪里有seo推广厂家
  • 网站建设与管理小论文南京专业网站营销
  • 建设网站必须要配置apache吗网站开发维护者
  • 移动网站 案例郑州网站建设与设计
  • 运营网站求个网站你懂我的意思吗
  • 网站建设进度巴中免费网站建设
  • 有没有做网站一次付费权重7以上的网站
  • 中国万网网站空间申请wordpress相关的网站
  • 厦门网页建站申请费用sem竞价推广
  • 大同做网站游戏网站建设计划书
  • 钢材销售都在哪个网站做网站开发主要内容和要求
  • 郴州北京网站建设大屏可视化ui设计
  • 样本之家登录网站天津市住房和城乡建设局网站
  • 网站建设 中企动力烟台沙洋网站定制
  • 网站建设 源美设计网站动态背景怎么做