Respondo cómo utilizo el patrón MVVM. MVVM es mejor en los siguientes escenarios:
1 Si varios controles están vinculados con una sola propiedad.
MVVM:
<TextBlock x:Name="text1" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
<TextBlock x:Name="text2" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
puedo añadir rápidamente un control similar o eliminar un control existente.
Comparar con código subyacente:
public string IsSomePropertyTrue
{
set
{
//...
text1.Visibility = value;
text2.Visibility = value;
}
}
2 En lugar de un multi-convertidor de
pública cepillo StateColor { obtener { si (== 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 Como un modelo de elemento de controles como ListBox o cuadrícula de datos. Por ejemplo, si quiero crear una lista de elementos con un botón para quitar cerca de cada elemento, crearé un control ItemView y una clase ItemViewModel.
<ItemsControl ItemsSource="{Binding SomeItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:ItemView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
4 Copia de un datos de una vista a otra:
public JournalEntryViewModel(SalesOrderViewModel vm) {}
5 ViewModel pueden heredar CLR-clases e implementar interfaces (INotifyPropertyChanged o INotifyDataErrorInfo).
También uso MVVM para reemplazar eventos con comandos o propiedades. Y el uso de las fuerzas de ViewModels para llamar a las propiedades por nombres inteligibles.
Si proporciona propiedades y comandos en un código subyacente y se unen mediante '= this.DataContext esto;', que es un modelo de vista demasiado . Simplemente no use un código como 'this.firstNameTextBlock.Text = this.CurrentItem.FirstName;' – vorrtex