У меня есть вид MVVM и модель просмотра. В конструкторе моего ViewModel я прохожу список сообщений IObservable и подписаться на них через простой класс сидит outide моей ViewModel и видаСоздание представления при получении сообщения
Вне классе
{
viewModel =
new ViewModelClass(
responseHandler.AsObservable());
viewModel.PropertyChanged += ViewModel_PropertyChanged;
}
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(ViewModelClass.MyProperty))
{
// Error here
view = new MyViewClass() { DataContext = viewModel };
}
}
В виде модель конструктора
subscription = receiveMessages.Subscribe(MessageReceived);
private void MessageReceived(GvsMessage message)
{
MyProperty = true;
}
При получении сообщения я хочу создать свое мнение не раньше этого. Хотя viewmodel создается прежде, чем обрабатывать изменение свойств и т. Д.
Проблема в том, что я получаю «вызывающий поток должен быть sta, потому что многие компоненты ui требуют этого». Может ли кто-нибудь помочь?
Нам нужно больше информации, так как здесь есть MT (многопоточность). Нам не нужен подробный пример, который мы могли бы понять, как ваше приложение построено. – XAMlMAX
Внешний класс сидит в потоке, и именно по этой причине я не могу изменить представление (создать представление и т. Д.) В ViewModel_PropertyChanged. Я попробовал взломать таймер, чтобы проверить, изменилась ли моя собственность и она работает. Но что это за хороший способ сделать это? Создание события также дает ту же проблему – user2837961
ОК, ваш 'View' должен быть создан в разделе «Основной пользовательский интерфейс». Вся обработка данных может быть выполнена в «Background Thread», иначе '' WPF' не понравится, потому что, если вы создаете 'UserControl' в потоке, отличном от UI, этот поток является владельцем созданного им объекта. – XAMlMAX