Ich kann beantworten, wie ich MVVM-Muster verwenden. MVVM ist besser in den folgenden Szenarien:
1 Wenn mehrere Steuerelemente mit einer einzigen Eigenschaft verbunden sind.
MVVM:
<TextBlock x:Name="text1" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
<TextBlock x:Name="text2" Visibility="{Binding IsSomePropertyTrue, Converter={StaticResource VisibilityConverter}"/>
Ich kann schnell ein ähnliches Steuerelement hinzufügen oder ein vorhandenes Steuerelement entfernen.
Vergleiche mit Code-Behind:
public string IsSomePropertyTrue
{
set
{
//...
text1.Visibility = value;
text2.Visibility = value;
}
}
2 Anstelle eines Multikonverters
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 Als Elementmodell in Steuerelementen wie ListBox oder DataGrid. Wenn ich zum Beispiel eine Liste von Elementen mit einer Schaltfläche zum Entfernen neben jedem Element erstellen möchte, erstelle ich ein ItemView-Steuerelement und eine ItemViewModel-Klasse.
<ItemsControl ItemsSource="{Binding SomeItems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:ItemView DataContext="{Binding}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
4 Kopieren von Daten aus einer Ansicht in eine andere:
public JournalEntryViewModel(SalesOrderViewModel vm) {}
5 ViewModel kann CLR-Klassen erben und Schnittstellen implementieren (INotifyPropertyChanged oder INotifyDataErrorInfo).
Außerdem verwende ich MVVM, um Ereignisse durch Befehle oder Eigenschaften zu ersetzen. Und die Verwendung von ViewModels zwingt zum Aufruf von Eigenschaften durch verständliche Namen.