Wie verhindere ich, dass mein ViewModel-code ausgeführt, in der designer?
Ich bin die Entwicklung einer vernetzten WPF-Anwendung mit dem MVVM-Muster, und es scheint, dass es läuft und die Verbindung zu Servern in den designer.
Weiß ich über die IsInDesignMode Eigenschaft, aber ich bin nicht sicher, wie es in einem ViewModel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur um diese Vorschläge, werden Sie wahrscheinlich wollen, um eine Optimierung für die Produktion und Bereitstellung.
Wenn Sie brauchen, um zu überprüfen, die design-Modus in das ViewModel, Sie sollten dies nur tun, wenn in
DEBUG
- Modus, ansonsten wird die veröffentlichte version wird immer durchführen, unnötige Kontrollen.Bei der Entwicklung, wenn im design-Modus können Sie das beenden der Methode (oder auch stub einige fake-Daten).
Diesen code als erste Zeile in den Konstruktor (oder was auch immer code aufgerufen wird):
C#:
VB:
Dachte ich, ich werde hinzufügen, um diese, wie ich habe gerade nachgeschaut etwas, das ich entdeckt im VS2015 und es bietet eine alternative Lösung. Im designer gibt es eine Schaltfläche "Deaktivieren-Projekt code".
Ich mache die Annahme, dass Ihre
ViewModel
instanziiert wird und immer die Sachen aus dem code hinter. Ich weiß, es bricht reinen MVVM, aber ich habe gesehen, viele Menschen, die Sachen tun, wieDataContext = new MyViewModel();
innerhalb des Konstruktors in der code-behind.Umschalten diese Schaltfläche lösen sollte, die Ausgabe und hilft, um Ihren code sauberer. Kasse MSDN für weitere Informationen.
Hier ist das Bild aus der MSDN-Dokumentation, damit Sie wissen, wie es aussieht. Ich bin sicher, der link wird brechen, irgendwann, irgendwie.
Entdeckte ich diese in VS2015, aber nicht sicher sind, welche edition dieses feature wurde Hinzugefügt.
Als seitliche Anmerkung, es dient auch als ein schöner Weg, um neu zu laden die designer. Wenn auch langsam, wenn ich es versucht habe. Ihre Laufleistung variieren kann.
Ich die folgende Anweisung verwenden, um code, die kann ich nur ausführen bei der Anwendung, die Laufzeit und die andernfalls zu einer Ausnahme führen, die in der XAML-designer.
Setzen Sie ein design-time-Daten-Quelle im XAML-Code wie dieser:
Lassen Sie Ihre design-Zeit-viewmodel-Erben von der Laufzeit viewmodel, sondern mock-up der Daten im Konstruktor. Sie können auch etwas tun, um Ihre Laufzeit view-Modell, so die design-Zeit-viewmodel nicht, führen Sie die data access-code.
Es hängt alles davon ab, wie Sie die Bindung zwischen der view und der view-Modell. Wenn es, ausgelöst durch den view im Konstruktor (das scheint wahrscheinlich, angesichts der Symptome), können Sie überprüfen, IsInDesignMode von dort. Andernfalls müssen Sie einen sehr schnellen überblick über Ihre Architektur (oder Rahmen, wenn Sie verwenden).