WinForms MVVM使用教程(一):创建向导

在本文中,您将开始创建根据 MVVM 模式构建的示例应用程序,并学习如何使用 Scaffolding Wizard。

获取工具下载 - DevExpress v21.2

1. 创建一个新的WinForms应用程序。 要创建项目的数据模型,请添加一个新的模型文件夹并使用下面的代码片段创建三个类——帐户、交易和类别,这些类使用数据注释属性并要求将 System.ComponentModel.DataAnnotations 库包含在您的项目中。

账户数据模型

using System.ComponentModel.DataAnnotations;
namespace MVVMExpenses.DataModels
{
    public class Account
    {
        [Key, Display(AutoGenerateField = false)]
        public long ID { get; set; }
        [Required, StringLength(30, MinimumLength = 4)]
        [Display(Name = "ACCOUNT")]
        public string Name { get; set; }
        [DataType(DataType.Currency)]
        [Display(Name = "AMOUNT")]
        public decimal Amount { get; set; }
        public override string ToString()
        {
            return Name + " (" + Amount.ToString("C") + ")";
        }
        public virtual ICollection Transactions { get; set; }
    }
}

类别数据模型

using System.ComponentModel.DataAnnotations;
namespace MVVMExpenses.DataModels
{
    public class Category
    {
        [Key, Display(AutoGenerateField = false)]
        public long ID { get; set; }
        [Required, StringLength(30, MinimumLength = 5)]
        [Display(Name = "CATEGORY")]
        public string Name { get; set; }
        [EnumDataType(typeof(TransactionType))]
        [Display(Name = "TRANSACTION TYPE")]
        public TransactionType Type { get; set; }
        public override string ToString()
        {
            return Name + " (" + Type.ToString() + ")";
        }
        public virtual ICollection Transactions { get; set; }
    }
}

交易数据模型 

using System.ComponentModel.DataAnnotations;
namespace MVVMExpenses.DataModels
{
    public enum TransactionType
    {
        Expense,
        Income
    }
    public class Transaction
    {
        [Key, Display(AutoGenerateField = false)]
        public long ID { get; set; }
        [Display(AutoGenerateField = false)]
        public long AccountID { get; set; }
        [Display(Name = "ACCOUNT")]
        public virtual Account Account { get; set; }
        [Display(AutoGenerateField = false)]
        public long CategoryID { get; set; }
        [Display(Name = "CATEGORY")]
        public virtual Category Category { get; set; }
        [DataType(DataType.Date)]
        [Display(Name = "DATE")]
        public DateTime Date { get; set; }
        [DataType(DataType.Currency)]
        [Display(Name = "AMOUNT")]
        public decimal Amount { get; set; }
        [DataType(DataType.MultilineText)]
        [Display(Name = "COMMENT")]
        public string Comment { get; set; }
    }
}

2. 跳转到Visual Studio 的 Project 菜单并选择 Manage NuGet Packages...菜单项,在在线存储中搜索 Entity Framework 6 package,然后单击 ‘Install’,请注意如果未安装此 NuGet 包,您将无法在此示例应用程序中使用实体模型。

3. 添加以下 DbContext 类后代,它将用作 DevExpress Scaffolding Wizard 的上下文。

using System.Data.Entity;
using MVVMExpenses.DataModels;

namespace MVVMExpenses.DataBase
{
    public class MyDbContext : System.Data.Entity.DbContext
    {
        static MyDbContext()
        {
            System.Data.Entity.Database.SetInitializer(null);
        }
        public DbSet Accounts { get; set; }
        public DbSet Categories { get; set; }
        public DbSet Transactions { get; set; }
    }
}

 4. 在继续下一步之前,构建您的项目并确保它编译时没有错误。 然后,在 Visual Studio 解决方案资源管理器中右键单击您的项目并选择 Add DevExpress Item - Data Model Scaffolding...(参见下图)。 这将启动 Scaffolding Wizard,它将生成完整的应用程序层次结构,包括来自数据上下文的 MVVM-ready DataModel。

WinForms MVVM使用教程(一):创建向导_第1张图片

注意:如果缺少此菜单项,请右键单击您的项目并选择默认的 Visual Studio Add - New Item... 选项。 在对话框中,选择 DevExpress Template Gallery 并手动启动 Scaffolding Wizard - 选择 Data Model Scaffolding 选项卡(WinForms Data Models 组)并单击右下角的 Run Wizard 按钮。

在 Wizard 对话框中,选择在第二步中创建的上下文,然后单击 Next。 检查所有必需的表和视图,然后单击Finish来启动模型生成。

WinForms MVVM使用教程(一):创建向导_第2张图片

 5. 结果,您将看到许多新文件、文件夹和类添加到应用程序中。

WinForms MVVM使用教程(一):创建向导_第3张图片

目前,只有向导生成的两个文件夹值得一提 - 包含您的 CRUD 数据模型的 DataModel 文件夹和包含 DbContext 中每个表的 MVVM ViewModel 的 ViewModels 文件夹 - Account、Category 和 Transaction。 在接下来的课程中,您将学习如何为这些 ViewModel 创建 View。

文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/] 

你可能感兴趣的:(Winform官方项目,c#,mvc,windows)