我首先实现了显示的功能(不用去读数据库,将数据直接填到集合里面,通过数据绑定,在界面能都显示出来),所以我应该是从Model和View层开始的。
首先是MainWindow.xaml 界面,代码和界面如下。
有5处关于数据绑定的:
1)ListBox 绑定 InlineTools(这是tool的集合,从数据库中获取所有的tools)但显示的只是Name。
2)SelectedItem绑定的是CurrentInlineTool,当选中其中一条tool时,CurrentInlineTool就是你当前选中的tool。
3) TextBox绑定的是CreateNewTool.Name,当创建一个新的tool时,其Name可以通过用户输入的方式命名。
4)两个Buttton分别绑定CreateCommand和DeleteCommand。新建一个tool以及删除一个tool.
12 3 274 245 236 107 8 911 1512 13 14 16 17 18 2219 20 21 25 26
InlineToolModel.cs代码如下,开始写的时候只写了前两个字段用来创建数据库,后面的方法是用到的时候添加上去的。
1 using CIS.DAL; 2 using Microsoft.Practices.Prism.Mvvm; 3 using SQL.DAL.Model; 4 using SQL.DAL.Repository; 5 using SQLtest.Model; 6 using System; 7 using System.Collections.Generic; 8 using System.Linq; 9 using System.Text;10 using System.Threading.Tasks;11 12 namespace SQLtest.Model13 {14 public class InlineToolModel:BindableBase, IEntity15 {16 public int Id17 {18 get;19 set;20 }21 private string name;22 public string Name23 {24 get { return name; }25 set26 {27 if (name != value)28 {29 name = value;30 this.OnPropertyChanged("name");31 }32 }33 }34 35 public void SaveTool()36 {37 if (string.IsNullOrEmpty(this.Name))38 {39 throw new Exception("用户名不能为空!");40 }41 if (this.IsExistSameName())42 {43 throw new Exception("已存在同名用户!");44 }45 InlineToolModel tool= new InlineToolModel();46 tool.Name = this.Name;47 CISDbContext db = new CISDbContext();48 db.t_InlineToolModel.Add(tool);49 db.SaveChanges();50 }51 public void DeleteTool()52 {53 InlineToolModel tool = new InlineToolModel();54 tool.Name = this.Name;55 CISDbContext db = new CISDbContext();56 var dblog = db.t_InlineToolModel.FirstOrDefault(d => d.Name == tool.Name);57 58 if (dblog != null)59 {60 db.t_InlineToolModel.Remove(dblog);61 db.SaveChanges();62 }63 }64 public bool IsExistSameName()65 {66 CISDbContext db = new CISDbContext();67 RepositoryoRep = new Repository (db);68 var exists = oRep.GetAll().Where(d => d.Name == this.Name && d.Id != this.Id);69 return exists.Count() > 0;70 }71 public InlineToolModel()72 { 73 }74 }75 }
MainWindowViewModel.cs代码如下,在此一定要注意实例化,不然总是会出错。里面定义了InlineTools,CurrentInlineTool ,CreateNewTool,CreateCommand和DeleteCommand,与数据绑定有关。
1 using CIS.DAL; 2 using Microsoft.Practices.Prism.Commands; 3 using Microsoft.Practices.Prism.Mvvm; 4 using SQL.DAL.Repository; 5 using SQLtest.Model; 6 using System; 7 using System.Collections.Generic; 8 using System.Collections.ObjectModel; 9 using System.Data.Entity;10 using System.Data.Entity.Validation;11 using System.Linq;12 using System.Text;13 14 using System.Threading.Tasks;15 using System.Windows;16 17 namespace SQLtest.Model18 {19 public class MainWindowViewModel : BindableBase20 {21 private ObservableCollectioninlineTools;22 public ObservableCollection InlineTools23 {24 get { return inlineTools; }25 set26 {27 inlineTools = value;28 this.OnPropertyChanged(() => InlineTools);29 }30 }31 private InlineToolModel currentTool;32 public InlineToolModel CurrentInlineTool33 {34 get { return currentTool; }35 set36 {37 currentTool = value;38 this.OnPropertyChanged(() => CurrentInlineTool);39 }40 }41 private InlineToolModel createNewTool;42 public InlineToolModel CreateNewTool43 {44 get { return createNewTool; }45 set46 {47 createNewTool = value;48 this.OnPropertyChanged(() => CreateNewTool);49 }50 }51 52 public static DelegateCommand