WPF MVVM Threadsafe способ получить список <Object>из ViewModel - PullRequest
1 голос
/ 05 августа 2009

Я пытаюсь получить доступ к списку на модели представления из фонового работника, но получаю ошибки, потому что я пересекаю поток ...

Это метод проблемы в модели представления: (я получаю исключение в первой строке функции (окно SMMainWindow ...))

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

Есть идеи? Пример кода будет оценен

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

Это очень помогает, если вы настраиваете свою ViewModel с экземпляром диспетчера вашего окна. Если у вас есть это, то вы можете просто использовать Dispatcher.Invoke для извлечения или установки элементов в ViewModel.

0 голосов
/ 05 августа 2009

Если это Freezable, вы можете заморозить окно. Это должно позволить вам получить к нему доступ.

Диспетчерский подход, вероятно, является хорошим вариантом, но я всегда чувствую, что это нарушение (кажется, что ViewModel слишком тесно взаимодействует с пользовательским интерфейсом), но, вероятно, это личное предпочтение.

Однако я подвергаю сомнению ваш подход здесь. Есть ли веская причина, по которой одна ViewModel пытается сослаться на другую? Я бы подумал переосмыслить этот подход ... Обычно, когда люди делают это, они получают доступ к ViewModel, когда на самом деле им следует прикасаться к модели.

...