Асинхронная связь между ViewModel и Model с использованием обмена сообщениями MVVM-Light? - PullRequest
1 голос
/ 18 января 2011

Я начинаю писать приложение для WP7, которое включает получение данных через HTTPWebRequest, я пытаюсь найти лучший способ вернуть данные в ViewModel после того, как асинхронный запрос вернется с данными.1002 * Model и ViewModel разделены на отдельные проекты в своих собственных пространствах имен, поэтому я не уверен, может ли MVVM-Light работать таким образом.Или я должен просто использовать легкую реализацию IoC и делегаты / события для обратного вызова ViewModel после того, как вызов в модели вернулся?

Ответы [ 2 ]

1 голос
/ 22 января 2011

Попробуйте это для размера: http://amazedsaint.blogspot.com/2010/10/asynchronous-delegate-command-for-your.html. Отлично подходит для тестирования, так как ни один из ваших методов не должен быть асинхронным, вы просто выполняете свою асинхронную команду.

Я немного отредактировал его, чтобы расширить DelegateCommand, чтобы я мог вызывать метод RaiseCanExecuteChanged (), как показано ниже:

public class AsyncDelegateCommand : DelegateCommand, ICommand
{

    BackgroundWorker _worker = new BackgroundWorker();
    Func<bool> _canExecute;

    /// <summary>
    /// The constructor
    /// </summary>
    /// <param name="action">The action to be executed</param>
    /// <param name="canExecute">Will be used to determine if the action can be executed</param>
    /// <param name="completed">Will be invoked when the action is completed</param>
    /// <param name="error">Will be invoked if the action throws an error</param>
    public AsyncDelegateCommand(Action action,
                                Func<bool> canExecute = null,
                                Action<object> completed = null,
                                Action<Exception> error = null
                                ) : base(action, canExecute)
    {
    ...
    }
}

Надеюсь, это поможет.

0 голосов
/ 18 января 2011

Вы уверены, что делаете запрос в нужном месте?Обычно модель содержит просто данные, которые вы хотите сохранить / передать, и модель представления будет обрабатывать преобразование свойств этой модели, чтобы представление могло отображать (или редактировать) эту модель.Я полагаю, что объекты Model - это то, что вы собираетесь вернуть из HttpWebRequest, и поэтому вы можете рассмотреть возможность использования класса Service для обработки извлечения данных, хотя это может быть излишним для вашего приложения.

* 1002В любом случае, я настоятельно рекомендую вам обрабатывать запрос и анализ ответа в одном месте;в противном случае вы распространяете логику по нескольким местам, что может привести к путанице и трудности в поддержке.

Если вам нужна помощь в понимании MVVM, вот несколько ресурсов, которые вы можете найти: helpf

...