这是实现MVVM的正确方法吗?

时间:2012-11-23 09:47:05

标签: c# wpf entity-framework mvvm datagrid

我正在创建一个应用程序,使用户能够插入,更新和删除已输入的数据,然后在数据网格中显示(CRUD操作)。

在我的视图模型中,它包含绑定到xaml的属性(例如Firstname)。它还包含导航属性以及验证属性。

      [Required(ErrorMessage = "First Name is a required field")]
      [RegularExpression(@"^[a-zA-Z''-'\s]{1,20}$", ErrorMessage = "First Name must       contain no more then 20 characters and contain no digits.")]
      public string FirstName
      {
        get { return _FirstName; }
        set
        {
            if (_FirstName == value)
                return;

            _FirstName = value;
            OnPropertyChanged("FirstName");
        }
    }

此外,它包含xaml执行的命令,用于创建CRUD操作的实例;

    private void UpdateFormExecute()
    {
        var org = new OrganisationTypeDetail();
        UpdateOrganisationTypeDetail(org);
    }

最后,它还包含CRUD操作。例如插入,更新和删除。

这引出了我的问题。如果我想实现正确的MVVM方式,那么所有这些代码对于视图模型都要包含太多吗?

我应该使用模型并在我的View模型中创建一个集合并将其绑定到我的xaml吗?这是正确的做法吗?

我应该使用存储库系统进行CRUD操作吗?如果是这样,我如何将数据从文本字段传递到模型以进行更新?

我是WPF,MVVM的新手,如果没有适当的指导,很难适应。

2 个答案:

答案 0 :(得分:3)

我想说这是实现MVVM的 正确方法,但 正确实现MVVM的方法。

我的意思是没有一个正确的方法来实现这种模式。如果您创建了一个可以绑定到View的ViewModel,而在View中没有任何额外的逻辑(即代码隐藏),那么您已经捕获了MVVM的本质。

是否在代码中添加更多模式和结构完全取决于您。如果这是一个简单的应用程序,我会保持模式轻。继续让ViewModel直接与存储库对话。在这方面,你现在的代码对我来说很合适。

如果这是一个大型应用程序,您可能需要添加更多层,如服务层,数据访问层。您可能想要考虑依赖注入。

不要只是采用一种模式,或者只是因为你认为你应该添加额外的一层。依赖注入听起来很酷,但在很多情况下,它比它的价值更麻烦!

答案 1 :(得分:0)

对我而言,这不是正确的方法,我认为在视图模型中定义像FirstName这样的属性并不是一个好主意。视图应该只包含模型,您的视图模型应该包装应该绑定到XAML的模型(如果需要)。

模型对象创建也应完全独立于视图模型。视图模型应该只知道模型上的单元操作,并且验证应该在模型内部,例如在您的情况下,ViewName中的FirstName验证意味着您只限制GUI来验证FirstName属性,但是如果有人从其他地方设置它,那该怎么办。