2012-11-23 36 views
9

我正在创建一个应用程序,使用户可以插入,更新和删除已经输入并显示在数据网格中的数据(CRUD操作)。这是实现MVVM的正确方法吗?

以我视图模型,它包含键合到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方式,视图模型所包含的所有代码是否太多?

我应该使用的模型和我的视图模型中创建一个集合的约束,且我xaml?这是否是正确的做法?

我应该使用Repository系统进行CRUD操作吗?如果是这样,我将如何将文本字段中的数据传递给模型以进行更新?

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

回答

3

我会说这是a正确的方式来实现MVVM,但不是正确的方式来实现MVVM。

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

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

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

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

+0

感谢您为我解决问题,困惑是由于有很多不同的方式,我只是不知道要跟随哪个!另外,“依赖注入”是什么意思? –

+0

http://en.wikipedia.org/wiki/Dependency_injection – ColinE

0

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

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

+0

谢谢你。如果我想使用属性验证,那么我会在那里放置?在模型中?那么从你说的话,将模型中的属性直接绑定到视图? –

+1

你能描述为什么它不是一个好主意吗?为什么它不是'正确的'MVVM?盲目遵守关于如何实现一个模式的规则与根本不使用模式一样糟糕! – ColinE

+0

@coline,因为在解释的例子中,FirstName似乎是一个模型的属性,我认为模型只能在视图模型中。 –

相关问题