如果你正在使用WPF,绝对要使用MVVM设计模式。它能让你的生活变得更简单,未来的维护也更容易。
关于你的评论:
我们认为使用这种模式可能会导致在定义Models时需要进行重新编写,在定义ViewModels时也需要进行重新编写。
在MVVM中处理Models/ViewModels有两种方式。"MVVM纯粹主义"的方法是从ViewModel公开Model的属性,这种情况下确实需要重复一些代码。更实际的方法是从ViewModel公开整个Model。两种方法都是可行的,尽管我建议除非你有一个有分离人员/团队在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}" />
关于Prism,我认为它是一个很棒的库。我更喜欢他们的
NotificationObject
和
EventAggregator
而不是我的,并且一旦我习惯了
DelegateCommand
不会自动提高其
CanExecuteChanged
参数时的变化,我就喜欢上了它。
唯一让我不太喜欢的是Prism的
RegionManager
。我觉得这让视图控制应用程序流程太多,而不是ViewModels。我也经常看到它被误用于导航,并且经常变成一团糟。我仍然使用它来定义我的应用程序布局(例如
MenuRegion
、
NavigationRegion
、
ContentRegion
),但除此之外,我使用我的ViewModel来满足所有导航需求。
所以最终,我会说去试试吧!我喜欢使用WPF,并且我认为你不应该在没有MVVM设计模式的情况下使用WPF。Prism也是一个很棒的库,可以为每个MVVM应用程序提供一些缺失的功能。