2009-08-05 5 views
1

Je suis en train d'accéder à une liste sur un modèle de vue d'un travailleur de fond, mais me fais des erreurs parce que je vais fil croix ...WPF MVVM ThreadSafe façon d'obtenir la liste <Object> de ViewModel

C'est le problème méthode sur le viewmodel: (Je reçois l'exception de la première ligne dans la fonction (fenêtre SMMainWindow ...))

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

Toutes les idées? Exemple de code serait apprécié

Répondre

3

Cela aide énormément si vous configurez votre ViewModel avec une instance de votre répartiteur de fenêtres. Si vous avez cela, alors vous pouvez simplement utiliser Dispatcher.Invoke pour récupérer ou définir des éléments dans le ViewModel.

+0

Je suis désolé, je suis un peu un répartiteur noob ... comment pourrais-je obtenir un objet du viewmodel avec ça? Je pensais que c'était le répartiteur de la fenêtre et non le viewmodel? – jle

+0

Je l'ai compris ... a dû ajouter une méthode pour l'obtenir ... Dispatcher a bien fonctionné – jle

0

Si c'est Freezable, vous pourriez être en mesure de geler votre fenêtre. Cela devrait vous permettre d'y accéder. L'approche Dispatcher est probablement une bonne option, mais j'ai toujours l'impression que c'est une violation (se sent comme le ViewModel traitant trop étroitement avec l'interface utilisateur), mais c'est probablement une préférence personnelle.

Cependant, je remets en question votre approche. Y a-t-il une bonne raison qu'un ViewModel essaye de référencer un autre? Je considérerais repenser cette approche ... Généralement quand les gens font ceci ils accèdent à ViewModel quand vraiment ils devraient toucher le modèle à la place.

Questions connexes