2016-07-15 4 views
0

Was ich brauche, ist eine Möglichkeit, programmgesteuert zu finden, welches ViewModel (in MVVM) dem entspricht, was gerade in der App angezeigt wird.UWP/C# - Wie kann ich feststellen, welche Art von ViewModel gerade angezeigt wird?

Ich habe ein ViewModel, das eine Comm-Handler-Methode enthält. Dieser Comm-Handler wird von einem externen Thread aufgerufen. Wenn dies passiert, muss ich eines von zwei Dingen tun: Wenn die Ansicht, die der VM entspricht, auf dem Bildschirm ist, muss ich den Inhalt der Nachricht analysieren und auf dem Bildschirm anzeigen. Wenn die der VM entsprechende Ansicht nicht auf dem Bildschirm angezeigt wird, muss die Nachricht für einen späteren Zeitpunkt gespeichert werden.

Zum Beispiel, wenn ich eine DisplayPage.xaml und eine DisplayPageViewModel.cs habe, und die App zeigt derzeit den Inhalt von DisplayPage, möchte ich etwas ähnliches wie der Code unten, um die spezifische Aufgabe zu erreichen.

if (<code to find VM type here> == typeof(DisplayPageViewModel)){ 
    //do viewmodel specific task 
} 

Wenn jedoch die App zur Zeit wurde MainPage.xaml Anzeige, ich will nicht um den Code auszuführen.

+2

Verwenden Sie das „ist“ Schlüsselwort den Typ des Datacontext zu überprüfen. Wenn DataContext DisplayPageViewModel ist {} andernfalls if (DataContext is ....) {} – Mangist

+0

DataContext ist normalerweise ein View-Feld. Gibt es eine Möglichkeit, die aktuelle Ansicht, die dem Benutzer angezeigt wird, zu erhalten? Wie ich unten in einem Kommentar gesagt habe, gibt es keinen DataContext, wo dieses Code-Snippet ausgeführt wird. – Sonicarrow

+0

wo läuft der Code-Snippet? – Mangist

Antwort

3

Sie können das Schlüsselwort is verwenden, um den Typ zu überprüfen. Sie können die DataContext Eigenschaft verwenden, um, na ja, das Datacontext bekommen :-)

public class ViewModelOne{ 

} 

public class ViewModelTwo{ 

} 


public class MasterClass : Control{ 

    public void CheckViewModel(){ 
     if(this.DataContext is ViewModelOne){ 

     } 
     else if(this.DataContext is ViewModelTwo){ 

     } 
    } 

} 
+0

Gibt es Einschränkungen/Richtlinien, wo dieser Code platziert werden sollte? Ich habe versucht, es in meinem Event-Handler (innerhalb von DisplayPageViewModel, aber von einem externen Thread aufgerufen), und es gab keine DataContext. – Sonicarrow

+0

@ Sonicarrow ohne Ihre gesamte Anwendung zu sehen Ich kann Ihnen nicht sagen, wo Code zu setzen .... Ich kann Ihnen ohne Frage sagen, das ist die Art und Weise obwohl lol –

+0

Ich fand einen Verweis auf DataContext in einer meiner .xaml.cs-Dateien , das ist, was ich im vorherigen Kommentar gesucht habe. Ihre Antwort hilft, wenn eine Ansicht ihr Ansichtsmodell finden muss, aber meine Situation ist, dass ich einen beliebigen Code in der App brauche, um die aktuelle Ansicht auf dem Bildschirm zu finden. Sobald ich die Ansicht gefunden habe, kann ich den Datenkontext verwenden, um das Ansichtsmodell zu finden (oder einfach anhand der Ansicht selbst vergleichen). – Sonicarrow

Verwandte Themen