Я могу ответить, как я использую шаблон MVVM.MVVM лучше в следующих сценариях:
1 Если несколько элементов управления связаны с одним свойством.
MVVM:
<TextBlock x:Name="text1" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
<TextBlock x:Name="text2" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
Я могу быстро добавить аналогичный элемент управления илиудалить существующий элемент управления.
Сравнить с выделенным кодом:
public string IsSomePropertyTrue
{
set
{
//...
text1.Visibility = value;
text2.Visibility = value;
}
}
2 Вместо мультиконвертера
public Brush StateColor {get {if (this.State)== State.Edited && this.IsPriority) return new SolidColorBrush (Color.FromArgb (255, 0, 255, 0));// ...}}
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Background="{Binding StateColor}" Text="{Binding State}"/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
3 В качестве модели элемента в элементах управления, таких как ListBox или DataGrid.Например, если я хочу создать список элементов с кнопкой удаления рядом с каждым элементом, я создам элемент управления ItemView и класс ItemViewModel.
<ItemsControl ItemsSource="{Binding SomeItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:ItemView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
4 Копирование данных из одного представления в другое:
public JournalEntryViewModel(SalesOrderViewModel vm) {}
5 ViewModel может наследовать CLR-классы и реализовывать интерфейсы (INotifyPropertyChanged или INotifyDataErrorInfo).
Также я использую MVVM для замены событий командами или свойствами.А использование ViewModels заставляет вызывать свойства по понятным именам.