2012-01-15 55 views
4

我们在我们的团队中研究使用Prism使用WPF的可能性。使用WPF,MVVM和Prism构建应用程序

我们当前的解决方案是使用Windows Forms构建的,因此在令人满意地实现此体系结构迁移的目标之前,有许多因素需要考虑和研究。

MVVM模式是与这些因素相关的新功能之一。这种模式使用了与我们团队目前所知道的完全不同的概念。

我们正在阅读和学习很多关于它的知识,我们无法确定它的使用(纯粹)是否会为我们的目的真正有效:我们将创建一个应用程序,该应用程序将拥有大量的窗口将使用CRUD(创建,读取,更新和删除)模型。例如:客户注册,产品注册等。 我们认为在模型定义期间使用这种模式会导致返工,必须在ViewModels定义期间重写。

我想知道是否有人有任何经验报告或提示可以指导我们使用这些技术。

+1

这是一个不适合StackOverflow格式的问题,因为它是一个非常广泛的问题,答案会有点基于意见。对于WPF开发来说,MVVM几乎毫不费力,而Prism是一个很好的DI库,在熟悉WPF和XAML后,您的工作效率应该非常高。如果你正在寻求保证和确认你的决定,那么你不应该问这样的问题,而是自己做一个试验和评估结果。 – slugster 2012-01-15 22:40:28

+0

对不起。我正在学习StackOverflow的规则。您可以通过查看我的声望来看到它。 – 2012-01-15 23:53:53

+1

没关系,你只需要将你的大问题分解成更简洁的问题,最好是那些有明确答案的问题,而不要用*“什么是最好的xyz”*或*“你能告诉我关于xyz的什么” *因为他们倾向于引发意见而不是事实。您需要玩WPF/MVVM/Prism,并在遇到特定问题时在这里提问。 – slugster 2012-01-16 00:00:06

回答

12

如果你正在使用WPF,肯定使用MVVM设计模式。它使生活变得更加简单,并且使未来的维护变得简单。

关于你的评论

我们认为,使用这种模式可以在模型 定义,它必须的ViewModels 定义中被重写造成返工。

有两种方法可以处理MVVM中的Models/ViewModels。 “MVVM-purist”方法是从ViewModel公开Model的属性,在这种情况下,你会复制一些代码。更实用的方法是从ViewModel公开整个模型。这两种方法都可以接受,但我会建议使用第二种方法,除非您有一个非常大的项目,其中有独立的人员/团队在Model和ViewModel图层上工作。

MVVM民粹:

public class CustomerViewModel 
{ 
    private Customer _customer; 

    public string Name 
    { 
     get 
     { 
      return _customer.Name; 
     } 
     set 
     { 
      if (value != _customer.Name) 
      { 
       _customer.Name = value; 
       RaisePropertyChanged("Name"); 
      } 
     } 
    } 
} 

<TextBlock Text="{Binding Name}" /> 

更实用的方法:

public class CustomerViewModel 
{ 
    private Customer _customer; 

    public Customer Customer 
    { 
     get 
     { 
      return _customer; 
     } 
     set 
     { 
      if (value != _customer) 
      { 
       _customer= value; 
       RaisePropertyChanged("Customer"); 
      } 
     } 
    } 
} 

<TextBlock Text="{Binding Customer.Name}" /> 

关于棱镜,我认为这是一个伟大的图书馆。我更喜欢他们的NotificationObjectEventAggregator属于我自己的,并且我喜欢DelegateCommand,一旦我习惯了这个事实,当CanExecute参数发生变化时,它不会自动提升它的CanExecuteChanged

棱镜我唯一不喜欢的是他们的RegionManager。我觉得让View控制应用程序流量太多了,而不是ViewModels。我也经常看到它经常被滥用于导航,而且经常会变成一团糟。我仍然使用它来定义我的应用程序布局(例如,MenuRegion,NavigationRegion,ContentRegion),但除此之外,我使用ViewModel来满足所有导航需求。

所以最终我会说去吧!我喜欢使用WPF,我觉得你不应该在没有MVVM设计模式的情况下使用WPF。Prism也是一个伟大的库,它提供了我觉得在每个MVVM应用程序中都需要的一些缺失功能。

+3

完美答案。这真的是我想要别人告诉我的。你给了我一个明确使用MVVM和Prism的理由。我只是不能投票给你,因为我的名声是1.呵呵。 – 2012-01-18 16:07:02

相关问题