Wie kann ein ViewModel ein Formular schließen und gleichzeitig die MVVM-Architektur beibehalten?
Das Grundprinzip von MVVM (Model-View-ViewModel) schreibt vor, dass das ViewModel die Besonderheiten der Ansicht nicht kennen sollte. Es treten jedoch Szenarien auf, in denen das ViewModel den Formularabschluss signalisieren muss. Lassen Sie uns zwei Lösungen untersuchen, die die Best Practices von MVVM einhalten:
Methode 1: Beschlagnahmtes Eigentum
Diese Methode verwendet eine angehängte Eigenschaft, um die Kommunikationslücke zwischen dem ViewModel und der View zu schließen. Die angehängte Eigenschaft legt direkt das DialogResult
des Formulars fest.
Implementierung:
<code class="language-csharp">using System.Windows; using System.Windows.Interactivity; namespace ExCastle.Wpf { public static class DialogCloser { public static readonly DependencyProperty DialogResultProperty = DependencyProperty.RegisterAttached( "DialogResult", typeof(bool?), typeof(DialogCloser), new PropertyMetadata(DialogResultChanged)); private static void DialogResultChanged( DependencyObject d, DependencyPropertyChangedEventArgs e) { var window = d as Window; if (window != null) window.DialogResult = e.NewValue as bool?; } public static void SetDialogResult(Window target, bool? value) { target.SetValue(DialogResultProperty, value); } } }</code>
XAML-Integration:
<code class="language-xml"><Window ... xc:DialogCloser.DialogResult="{Binding DialogResult}" xmlns:xc="clr-namespace:ExCastle.Wpf"> ... </Window></code>
Das ViewModel legt die Eigenschaft DialogResult
fest und löst so aus, dass die Logik der angehängten Eigenschaft das Fenster schließt.
Methode 2: Interaktionselement (Verhalten oder Befehl)
Dieser Ansatz nutzt ein Verhalten oder einen Befehl innerhalb der Ansicht, um als Vermittler zu fungieren. Das ViewModel löst das Verhalten oder den Befehl aus, der dann das Formular schließt. Dies bietet mehr Flexibilität, erhöht jedoch die Komplexität.
Fazit:
Beide Techniken ermöglichen ViewModel-gesteuertes Formularschließen ohne MVVM zu verletzen. Der Ansatz mit angehängten Eigenschaften ist einfacher und direkter, während der Ansatz mit Interaktionselementen eine größere Erweiterbarkeit bietet. Die optimale Wahl hängt von den spezifischen Anforderungen und der Komplexität der Anwendung ab.
Das obige ist der detaillierte Inhalt vonWie kann ein ViewModel ein Formular schließen und dabei die MVVM-Prinzipien einhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!