2015-01-26 3 views
0

MVVM Light를 배우려고하고 Windows Phone 8 응용 프로그램에 사용했습니다. 위대한 일이지만 MVRS 패턴으로 푸시 알림을 사용하는 방법에 대한 자습서 나 샘플을 찾을 수 없습니다. 내 MainPage에서MVVM light-push notifications

나는 HttpNotificationChannel을 설정하고 나는 알림을 수신하고 있습니다 :

void PushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e) 
     { 
      StringBuilder message = new StringBuilder(); 
      string relativeUri = string.Empty; 

      message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString()); 

      // Parse out the information that was part of the message. 
      foreach (string key in e.Collection.Keys) 
      { 
       message.AppendFormat("{0}: {1}\n", key, e.Collection[key]); 

       if (string.Compare(
        key, 
        "wp:Param", 
        System.Globalization.CultureInfo.InvariantCulture, 
        System.Globalization.CompareOptions.IgnoreCase) == 0) 
       { 
        relativeUri = e.Collection[key]; 
       } 
      } 

      // Display a dialog of all the fields in the toast. 
      //Dispatcher.BeginInvoke(() => MessageBox.Show(message.ToString())); 

     } 

이제 내가 무엇을 제출해야 할 지 모르겠습니다. 약 5 가지 종류의 알림을 받으면 앱의 다른 페이지로 이동하거나 페이지를 새로 고쳐야합니다 (또는 저장 공간에 일부 데이터 저장). 어떻게해야합니까? 검색 할 때 mvvm 표시등이있는 일부 메시징 시스템을 찾습니다. 알림에 사용할 수 있습니까? 어떤 종류의 메시지를 사용해야합니까? 몇 가지 예제 코드를 제공하거나 튜토리얼 (기사/비디오)을 가르쳐 주시겠습니까? 감사합니다

답변

1

이것은 MVVMlight의 메시징 시스템을 사용합니다. 이는 뷰 모델이 구독 할 수있는 깨끗하고 밀접하게 결합 된 콜백을 제공하기 때문입니다.

public static readonly string REFRESHCONTENTMESSAGE = "RefreshContent"; 
public static readonly string DELETECONTENTMESSAGE = "DeleteContent"; 

그런 다음 당신의 ViewModel에 메신저에 가입 :

Messenger.Default.Register<NotificationMessage>(this, HandleMessage); 

마지막 설정을 위해 푸시 알림 서비스 클래스에서

당신의 ViewModel을들을 수 있습니다 공공 메시지 문자열을 몇 노출 처리기 :

public void HandleMessage(NotificationMessage message) { 
    if (message.Notification.Equals(YourService.REFRESHCONTENTMESSAGE)) 
    { 
     // Do stuff like navigating to a page. 
    } 
    else if (message.Notification.Equals(YourService.DELETECONTENTMESSAGE)) 
    { 
     // Do something else. 
    } 
} 

이제해야 할 일은 혼란을 보내는 것입니다. 새 알림을 받으면 푸시 알림 서비스 클래스의 나이 :

Messenger.Default.Send<NotificationMessage>(new NotificationMessage(REFRESHCONTENTMESSAGE)); 

이것은 간단한 버전입니다. 실제로 주위에 데이터를 전송 할 수있는 버전을 찾고 있다면, 내용으로 NotificationMessage 갈 (그리고 일반적인 측면에 위의 코드를 조정) :

Messenger.Default.Send<NotificationMessage<MyObject>>(new NotificationMessage<MyObject>(REFRESHCONTENTMESSAGE)); 

// In your handler: 
MyObject payload = message.Content; 

을 당신은 정의의 깊은 수준을 필요로하는 경우를 자신의 메시지 유형을 작성할 수 있어야합니다. 하지만 당신이 기존의 것들로 괜찮을 거라고 생각합니다. 이점은 중요한 메시지 수를 보낼 경우 응용 프로그램 내부의 메시지 트래픽을 줄이는 특수 메시지 유형만을 명시 적으로 수신 할 수 있다는 것입니다.

+0

감사합니다. 그것은 위대한 작품. –

+0

@Fred - 불행히도 메신저는 MVVM과 아무 관련이 없습니다. MVVM을 사용하여 어떻게 해결할 수 있습니까? –