Frage

Ich habe eine WPF-Anwendung, die ich in dem MVVM Stil zu schreiben versucht. Wenn eine Ausnahme ausgelöst wird (wie wenn ein Dokument geöffnet wird), würde Ich mag eine MessageBox angezeigt werden soll. Einfach zu tun, aber mein Code fühlt sich nicht ganz richtig, weil der MessageBox.Show Anruf in der Modelview ist. Ich dachte, so etwas sollte in der Ansicht leben, aber ich bin nicht setzen Code in der Ansicht soll.

So ist die Frage wirklich destilliert werden kann, um nach unten, was ist der vorgeschlagene Weg, um eine MessageBox in MVVM angezeigt werden?

War es hilfreich?

Lösung

Verwenden Sie einen Dienst:

public void SomeMethodInYourViewModel()
{
    try
    {
        DoSomethingDangerous();
    }
    catch (Exception ex)
    {
        ServiceLocator.Resolve<IMessageService>().ShowMessage(ex.Message);
    }
}

Sie haben nun Ihre VMs aus der Präsentation von Nachrichten entkoppelt. Sie können entscheiden, auch nicht den Standard zu verwenden (hässlich) Message-Boxen überhaupt, und das wird Auswirkungen auf Ihre VMs nicht.

Andere Tipps

Haben Sie einen Blick auf Josh Smith ausgezeichnete MVVM Foundation auf Codeplex . Insbesondere haben einen Blick auf die Messenger-Klasse, eine leichte Art und Weise der Weitergabe von Nachrichten zwischen verschiedenen Ansichtsmodell Objekte, die nicht bewusst voneinander sein müssen.

Auch ich glaube nicht, gibt es eine Hard-und-schnell-Regel auf „No Code in der Ansicht“, obwohl es am besten vermieden werden, wenn möglich ... denken Sie daran, dass Ihr XAML ist einfach .net Code geschrieben in eine deklarative Syntax; der Code-behind ist nur C # oder VB.net zu ergänzen, dass (wenn es unbedingt notwendig!)

Sie könnte wie auch nur eine Errormessage String-Eigenschaft setzt auf Ihrer Viewmodel-Klasse, die Ihre Ansicht binden kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top