Heim > Backend-Entwicklung > C++ > Wie kann ich ein WPF-Formular aus dem ViewModel mithilfe einer angehängten Eigenschaft in MVVM schließen?

Wie kann ich ein WPF-Formular aus dem ViewModel mithilfe einer angehängten Eigenschaft in MVVM schließen?

Mary-Kate Olsen
Freigeben: 2025-01-23 02:44:11
Original
189 Leute haben es durchsucht

How Can I Close a WPF Form from the ViewModel Using an Attached Property in MVVM?

Schließen Sie das WPF-Formular in MVVM mithilfe angehängter Eigenschaften

In MVVM-Anwendungen kann das Verwalten des Formularschließens eine Herausforderung sein, da das ViewModel nichts über die tatsächliche Ansicht weiß. In diesem Artikel wird eine elegante Lösung untersucht, bei der angehängte Eigenschaften zum nahtlosen Schließen eines Formulars aus einem ViewModel verwendet werden.

Dilemma

Stellen Sie sich ein typisches Anmeldeformular vor, bei dem das ViewModel Benutzeranmeldeinformationen enthält. Beim Senden des Anmeldebefehls startet das ViewModel den Anmeldevorgang:

  • Nach erfolgreicher Anmeldung muss das Anmeldeformular geschlossen und ein gültiges DialogResult zurückgegeben werden.
  • Wenn die Anmeldung ungültig ist, wird eine Fehlermeldung angezeigt und das Formular bleibt geöffnet.

Überwinden Sie Barrieren mit zusätzlichen Attributen

Um dieser Herausforderung zu begegnen, können wir eine zusätzliche Eigenschaft nutzen, um die Lücke zwischen ViewModel und View zu schließen:

<code class="language-xml"><Window ... DialogResult="{Binding DialogResult, Source={StaticResource ViewModel}}"
       xmlns:xc="clr-namespace:ExCastle.Wpf">
</Window></code>
Nach dem Login kopieren

Diese Eigenschaft bindet die DialogResult-Eigenschaft des ViewModel an die DialogResult-Eigenschaft des Fensters. Wenn das ViewModel das DialogResult ändert, aktualisiert die angehängte Eigenschaft automatisch das DialogResult des Fensters und schließt das Formular entsprechend.

Code-Implementierung

Das Folgende ist der Code für das angehängte Attribut:

<code class="language-csharp">using System.Windows;

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>
Nach dem Login kopieren

Implementieren Sie im ViewModel einfach INotifyPropertyChanged und aktualisieren Sie die DialogResult-Eigenschaft, wenn die Anmeldung erfolgreich ist:

<code class="language-csharp">private bool? _dialogResult;
public bool? DialogResult
{
    get { return _dialogResult; }
    set
    {
        _dialogResult = value;
        OnPropertyChanged(nameof(DialogResult));
    }
}

// 登录命令逻辑
public ICommand LoginCommand { get; set; }</code>
Nach dem Login kopieren

Einfachheit und Reinheit

Dieser Ansatz löst das Problem beim Schließen von Formularen auf elegante Weise, ohne die MVVM-Prinzipien zu beeinträchtigen. Das ViewModel bleibt von der Ansicht entkoppelt und steuert gleichzeitig effektiv das Schließen des Formulars durch einfache Eigenschaftenbindung.

Das obige ist der detaillierte Inhalt vonWie kann ich ein WPF-Formular aus dem ViewModel mithilfe einer angehängten Eigenschaft in MVVM schließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage