2009-08-05 5 views
1

Ich versuche, eine Liste auf einem View-Modell von einem Hintergrundarbeiter zugreifen, aber Fehler sind immer, weil ich Querfaden werde ...WPF MVVM Thread Weg Liste bekommen <Object> von Viewmodel

Das ist das Problem Methode auf dem Viewmodel: (ich bin die Ausnahme die erste Zeile in der Funktion (SMMainWindow Fenster ...) bekommen)

public static MainWindowViewModel GetMainWindowViewModel() { 
      SMMainWindow window = (SMMainWindow)System.Windows.Application.Current.MainWindow; 
      if (window != null) { 
       return (MainWindowViewModel)window.DataContext; 
      } 
      return null; 
} 

Irgendwelche Ideen? Beispielcode würde geschätzt werden

Antwort

3

Es hilft enorm, wenn Sie Ihr ViewModel mit einer Instanz Ihres Window's Dispatcher einrichten. Wenn Sie dies haben, können Sie Dispatcher.Invoke verwenden, um Elemente innerhalb des ViewModel abzurufen oder festzulegen.

+0

Es tut mir leid, ich bin ein bisschen ein Dispatcher Noob ... wie würde ich ein Objekt aus dem Viewmodel damit bekommen? Ich dachte, es wäre der Dispatcher des Fensters und nicht das Viewmodel? – jle

+0

Ich fand es heraus ... musste eine Methode hinzufügen, um es zu bekommen ... Dispatcher hat gut funktioniert – jle

0

Wenn es Freezable ist, können Sie möglicherweise Ihr Fenster einfrieren. Dies sollte Ihnen erlauben, darauf zuzugreifen. Der Dispatcher-Ansatz ist wahrscheinlich eine gute Option, aber ich habe immer das Gefühl, dass dies eine Verletzung ist (fühlt sich an wie das ViewModel, das sich zu sehr mit der Benutzeroberfläche beschäftigt), aber es ist wahrscheinlich persönliche Präferenz.

Ich Frage Ihren Ansatz hier jedoch. Gibt es einen guten Grund, ein ViewModel versucht, einen anderen zu verweisen? Ich würde darüber nachdenken, diesen Ansatz zu überdenken ... Wenn Leute dies tun, greifen sie auf ViewModel zu, wenn sie das Modell stattdessen wirklich berühren sollten.