Если вы работаете с WPF, обязательно используйте шаблон проектирования MVVM. Это значительно упрощает жизнь и облегчает дальнейшее обслуживание.
По поводу вашего комментария
Мы думаем, что использование этого паттерна может привести к переделке моделей.
определения, которые должны быть переписаны во время ViewModels
определения.
Существует два способа работы с моделями / моделями представления в MVVM. Подход "MVVM-purist" состоит в том, чтобы выставить свойства вашей Модели из ViewModel, и в этом случае вы бы дублировали некоторый код. Более практичный подход состоит в том, чтобы представить всю Модель из ViewModel. Оба способа приемлемы, хотя я бы рекомендовал использовать второй, если у вас нет очень большого проекта с отдельными людьми / командами, работающими над слоями Model и ViewModel.
MVVM Purist:
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
при изменении параметра CanExecute
.
Единственное, что в Prism мне не очень нравится, это их RegionManager
. Я чувствую, что это позволяет View контролировать поток приложений, а не ViewModels. Я также вижу, что его часто неправильно используют для навигации, и довольно часто он превращается в беспорядок. Я все еще использую его для определения макета моего приложения (например, MenuRegion
, NavigationRegion
, ContentRegion
), однако помимо этого я использую свою ViewModel для всех навигационных нужд.
Так что, в конце концов, я бы сказал, пойти на это! Мне нравится работать с WPF, и я чувствую, что вы не должны использовать WPF без шаблона проектирования MVVM. Prism также является отличной библиотекой, предоставляющей некоторые недостающие функциональные возможности, которые, по моему мнению, необходимы в каждом приложении MVVM.