2015-06-11 2 views
2

У меня есть xaml-файл с окном datagrid. Свойство Itemsource является свойством в связанной ViewModel.Обновление свойства в представленииModel

В моем классе ViewModel xaml (например, на стороне клиента) я вызываю метод M на сервере, используя API-интерфейс для обмена сообщениями. (Сервер реализован с использованием службы Windows .net).

Этот метод M внутренне использует .NET в Enqueue() и TPL (Task Parallel Library) выполнить метод и возвращает результаты клиенту (с помощью messagging API).

Мне нужно программно обновить свойство в моем ViewModel, как только этот метод будет завершен на сервере. Как мне это достичь?

(Проблема заключается в том, что клиент делает запрос к серверу на сервере UI thread.The работает асинхронно в отдельном потоке.)

Спасибо заранее.

+0

Можете ли вы предоставить код? – VMAtm

ответ

1

Для скалярных свойств вам ничего не нужно. Когда вы вызываете «OnPropertyChanged», вызов уже настроен на поток пользовательского интерфейса. Однако, к сожалению, некоторые типы, такие как ObservableCollections, не являются потокобезопасными. Таким образом, альтернативы должны использовать поточно-безопасную коллекцию, например, this, или для обработки маршаллинга. По существу, используйте диспетчер для вызова некоторого кода в поток пользовательского интерфейса. Вот простой пример:

App.Current.Dispatcher.Invoke(new Action(()=> 
{ 
    //The code I want to run on the UI thread. 
})); 
Смежные вопросы