MVVMLight를 사용하여 MVVM Silverlight 응용 프로그램을 코딩하고 있습니다. Model과 ViewModel 사이에서 통신하는 가장 좋은 방법은 무엇인지 스스로에게 묻고있었습니다. 내 모델은 웹 서비스에서 비동기 호출을 가지고 있으며 반환 값을 얻는 가장 좋은 방법은 무엇인지 알지 못합니다. 나는 MvvmLight 메신저를 사용하고 있습니다 첫 번째 예에서,ViewModel과 모델간에 비동기 호출을 교환하는 방법
public static void ModifySomething(Something s, Action<Something, Exception> callback)
{
var c = ServiceFactory.RecupererService();
c.ModifySomethingCompleted += (sender, e) =>
{
if (callback != null) callback(e.Result, e.Error);
};
c.ModifySomethingAsync(s);
}
두 작품, 그래서를 등록해야 :
public static void ModifySomething(Something s)
{
var c = MyServiceFactory.GetService();
c.ModifySomethingCompleted += (sender, e) =>
{
if (e.Error != null)
{
Messenger.Default.Send(new XyzException(e.Error, "ModifyError"));
return;
}
Messenger.Default.Send(e.Result, "ModifyOk");
};
c.ModifySomethingAsync(s);
}
이를 :
나는이 시도했다 내 모델의 모든 메소드에 대한 문자열 메시지 목록. 그러면 모든 ViewModel이이 작업에 연결할 수 있습니다.
두 번째 예에서는 고전적인 방법을 사용하여 Completed 이벤트에서 발생하는 콜백을 보냅니다. 하나의 콜백 만 실행되지만 코드는 훨씬 더 읽기 쉽습니다.
최상의 접근 방법은 무엇입니까?
비동기 호출은 어떻게 처리됩니까? –
비동기 메서드는 서비스 참조 (코드는 wsdl 파일에서 자동 생성 됨)에서 호출되며 모델 부분의 정적 메서드에서 호출됩니다. –