2015-03-01 2 views
0

Я видел здесь оригинальный вопрос. asynchronous UI update from ViewModel in WPF Несмотря на то, что был принят ответ, автор оригинала задавал вопрос, на который я нахожусь. Все это сводится к правильному способу включения объекта Dispatcher в связанную модель View.обновление асинхронного интерфейса от ViewModel в WPF

Итак ... У меня есть вид с сеткой, привязанной к наблюдаемой коллекции в модели «Автомобили». В конструкторе модели представления я вызываю SharePoint с помощью QueryAsync. В методе успеха я должен позвонить Диспетчеру. Возможны >> Dispatcher.CurrentDispatcher.Invoke(), App.Current.Dispatcher.Invoke

Ничто из этого не работает для меня. Я не знаю, должен ли я отправить диспетчера в модель просмотра. (Я не знаю, как это сделать) или создайте диспетчер в модели просмотра и присвойте ему что-то.

Я действительно даже не думаю, что я делаю это правильно. Вы бы подумали, что там будет какой-то достойный примерный код.

+0

Что вы имеете в виду под «ни один из них, кажется, работает для меня»? Используете ли вы Silverlight или WPF? Проверьте, помогает ли этот ответ: http://stackoverflow.com/a/4621651/667792 –

+0

Как сказал Милош, пожалуйста, объясните, почему то, что вы пытаетесь, не работает. т.е. любое сообщение об ошибке, которое вы получаете. Также было бы полезно узнать, действительно ли это WPF или Silverlight; вы оба помечены, и они часто делают вещи несколько иначе. В любом случае, если вы выполняете 'Dispatcher.BeginInvoke (() => {<ваше действие здесь>}), он должен работать. Но я бы также сделал 'Dispatcher.CheckAccess()' first и только вызывать вызов, если проверка завершилась неудачно. Если проверка вернется, просто вызовите действие самостоятельно. – Taekahn

ответ

1

Вы можете добавить общедоступную ссылку на диспетчера пользовательского интерфейса UI (ваше основное окно/пользовательский элемент управления) в классе App (App.xaml.cs) и, возможно, ввести его при создании модели вашего представления.

Я предлагаю вам использовать структуру MVVM как MVVM Ligh toolkit, что уже решает эту проблему в очень изящным способом, вот пример: Simple example of DispatcherHelper

Смежные вопросы