У меня есть начало моего первого приложения Silverlight MVVM, и мне нужно знать, где я должен разместить бизнес-логику, включая асинхронные вызовы службы. Идет ли он на странице, на которой размещен просмотр? Я просто устанавливаю свойство ViewModel, которое обновляет представление?
MVVM в Silverlight — куда идет логика асинхронной службы?
Ответы (4)
Выполнение MVVM в Silverlight сложнее, чем в WPF, но мы это сделали. Да, мы поместили асинхронный вызов службы в ViewModel. «Модель» в нашем случае — это прокси-объекты, которые отправляются туда и обратно через вызов веб-службы. К сожалению, это означает, что некоторые из ваших функций находятся в вашей клиентской ViewModel, а некоторые — на стороне сервера. Там действительно нет никакого способа обойти это.
... и да, попросите обработчик событий Async Complete записать в свойство ViewModel и убедитесь, что это свойство (или коллекция) реализует INotifyPropertyChanged (или INotifyCollectionChanged). Если вы получаете «модельные» объекты обратно из веб-службы, и эти объекты сами не реализуют INotifyPropertyChanged, вам также следует рассмотреть объект-оболочку ViewModel вокруг них. Таким образом, если у вас есть представление для каждого из этих объектов, они могут выполнять двустороннюю привязку.
У вас есть хороший пример от Microsoft здесь. Это очень помогло мне понять вызовы MVVM и ASYNC.
Я склонен согласиться с тем, что вызов службы, который приведет к модификации данных, должен обрабатываться моделью представления.
Я помещаю свои вызовы асинхронных служб в модель и подключаюсь к событиям из моей модели представления, которые запускаются, когда данные возвращаются в модель.