如果你正在使用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}" />
关于棱镜,我认为这是一个伟大的图书馆。我更喜欢他们的NotificationObject
和EventAggregator
属于我自己的,并且我喜欢DelegateCommand
,一旦我习惯了这个事实,当CanExecute
参数发生变化时,它不会自动提升它的CanExecuteChanged
。
棱镜我唯一不喜欢的是他们的RegionManager
。我觉得让View控制应用程序流量太多了,而不是ViewModels。我也经常看到它经常被滥用于导航,而且经常会变成一团糟。我仍然使用它来定义我的应用程序布局(例如,MenuRegion
,NavigationRegion
,ContentRegion
),但除此之外,我使用ViewModel来满足所有导航需求。
所以最终我会说去吧!我喜欢使用WPF,我觉得你不应该在没有MVVM设计模式的情况下使用WPF。Prism也是一个伟大的库,它提供了我觉得在每个MVVM应用程序中都需要的一些缺失功能。
这是一个不适合StackOverflow格式的问题,因为它是一个非常广泛的问题,答案会有点基于意见。对于WPF开发来说,MVVM几乎毫不费力,而Prism是一个很好的DI库,在熟悉WPF和XAML后,您的工作效率应该非常高。如果你正在寻求保证和确认你的决定,那么你不应该问这样的问题,而是自己做一个试验和评估结果。 – slugster 2012-01-15 22:40:28
对不起。我正在学习StackOverflow的规则。您可以通过查看我的声望来看到它。 – 2012-01-15 23:53:53
没关系,你只需要将你的大问题分解成更简洁的问题,最好是那些有明确答案的问题,而不要用*“什么是最好的xyz”*或*“你能告诉我关于xyz的什么” *因为他们倾向于引发意见而不是事实。您需要玩WPF/MVVM/Prism,并在遇到特定问题时在这里提问。 – slugster 2012-01-16 00:00:06