2009-08-11 10 views
3

Ich habe die Anfänge meiner ersten Silverlight MVVM-App und muss wissen, wo ich Geschäftslogik einschließlich async Serviceaufrufe setzen sollte. Geht es auf der Seite, auf der die Ansicht gehostet wird? Setzen Sie einfach eine Eigenschaft des ViewModel, die die Ansicht aktualisiert?MVVM in Silverlight - Wohin geht die asynchrone Servicelogik?

Antwort

3

MVVM in Silverlight ist schwieriger als in WPF, aber wir haben es geschafft. Ja, wir stellen den Async-Serviceaufruf in das ViewModel. Das "Modell" in unserem Fall sind die Proxy-Objekte, die über den Web-Service-Aufruf hin- und hergeschickt werden. Leider bedeutet dies, dass einige Ihrer Funktionen in Ihrem Client ViewModel und einige auf der Serverseite sind. Es gibt wirklich keine Möglichkeit, dies zu umgehen.

... und ja, lassen Sie den Ereignishandler Async Complete in eine Eigenschaft im ViewModel schreiben und stellen Sie sicher, dass die Eigenschaft (oder Sammlung) INotifyPropertyChanged (oder INotifyCollectionChanged) implementiert. Wenn Sie "Modell" -Objekte vom Webdienst zurückholen und diese Objekte INotifyPropertyChanged nicht selbst implementieren, sollten Sie ein Wrapper-ViewModel-Objekt auch um diese Objekte herum betrachten. Wenn Sie eine Ansicht für jedes dieser Objekte haben, können Sie auf diese Weise eine bidirektionale Bindung durchführen.

1

Ich würde eher zustimmen, dass ein Serviceaufruf, der zu einer Datenänderung führen würde, vom Viewmodel behandelt werden sollte.

1

Ich habe meine Aufrufe an asynchrone Dienste im Modell und hakte mich in Ereignisse aus meinem Ansichtsmodell ein, die ausgelöst werden, wenn die Daten an das Modell zurückgegeben werden.

2

Sie haben ein gutes Beispiel von Microsoft here. Dies hat mir geholfen, MVVM- und ASYNC-Anrufe zu verstehen.