1

Ich bin neu in WP7 und komme aus der iPhone-Entwicklung. Auf dem iPhone verwende ich NSNotificationCenter, um mein Programm über etwas zu informieren. NSNotificationCenter ist standardmäßig in das Framework integriert. Gibt es in WP7 etwas Ähnliches? Ich bin über MVVM-Light Toolkit gestolpert, aber ich bin nicht sicher, wie ich es richtig benutzen soll.Windows Phone 7 entspricht NSNotificationCenter?

Was ich tun möchte:

  • Register zu einer Mitteilung-Id und etwas tun, wenn Mitteilung-Id empfangen wird
  • Benachrichtigung senden mit Notification-Id und einem Kontext (Objekt Beobachter zu übergeben)
  • Jeder, der an der gleichen Mitteilung-ID-Register wird

som So benachrichtigt ething wie:

NotificationCenter.Default.send(notification-id, context); 

Beispiel für die Registrierung:

NotificationCenter.Default.register(receiver, notification-id, delegate); 

Senden Registrieren

NotificationCenter.Default.register(this, NotifyEnum.SayHello, m => Console.WriteLine("hello world with context: " + m.Context)); 

gesendet ...

NotificationCenter.Default.send(NotifyEnum.SayHello, "stackoverflow context"); 

Antwort

4

Hier ist, wie mit dem MVVM Light Toolkit zu tun:

Registrierung:

Messenger.Default.Register<string>(this, NotificationId, m => Console.WriteLine("hello world with context: " + m.Context)); 

Senden:

Messenger.Default.Send<string>("My message", NotificationId); 
+0

aahh thx. Also muss ich meine Benachrichtigungs-ID als Token beim Registrieren/Senden in MVVM verwenden, stimmt das? – Buju

+0

Genau. Das Token kann jede Art von Objekt –

+0

Thx sein, also MVVM ist ein wenig herum, ich mag ... Messenger.Default.Send (Kontext-Objekt, NotificationId) ... das ist, warum ich ein wenig war verwirrt. Danke noch einmal. – Buju

0

Hier http://www.silverlightshow.net/items/Implementing-Push-Notifications-in-Windows-Phone-7.aspx finden Sie ein gutes Beispiel finden wie man benutzt Push-Benachrichtigung auf Windows Phone 7.

+0

Für das, was ich gerade online sind verstehen, Push-Benachrichtigungen basieren? Oder gibt es Offline-Push-Benachrichtigungen wie lokale Benachrichtigungen auf iOS für WP7? Weil ich nur Benachrichtigungen in meiner App benötige und keine Online-Verbindung benötige. – Buju

+0

Soweit ich weiß, ist dies nur für Online-Benachrichtigungen. Ich weiß nicht, ob es für offline gibt, aber ich denke nicht. Dies würde Multitasking bedeuten, bei dem Ihre Apps im Hintergrund ausgeführt werden. – Mariusz

0

Ich bin mir ziemlich sicher, dass Sie archivieren das gleiche Ergebnis wie NSNotificationCenter, indem Sie ein Singleton erstellen, das eine Liste von Observablen enthält, die je nach Ihren Geschäftsanforderungen eine bestimmte Schnittstelle implementieren, oder rufen Sie eine Instanz auf ba oder triggern Sie ein Ereignis, für jede von diesem Singleton gesendete Nachricht verschachteln Sie die Observablenliste und überprüfen die Nachrichten-ID. Sobald Sie eine oder mehrere gefunden haben, können Sie die Interface-Methode aufrufen oder den Lambda-Ausdruck ausführen oder das Ereignis auslösen definiert, um den Inhalt der Nachricht zu verdauen.

So etwas wie unten:

public class NotificationCenter { 

    public static NotificationCenter Default = new NotificationCenter(); 

    private List<KeyValuePair<string, INotifiable>> consumers; 

    private NotificationCenter() { 

     consumers = new List<INotifiable>(); 
    } 

    public void Register(string id, INotifiable consumer) { 

     consumers.Add(new KeyValuePair(id, consumer)); 
    } 

    public void Send(String id, object data) { 

     foreach(KeyValuePair consumer : consumers) { 

      if(consumer.Key == id) 
       consumer.Value.Notify(data); 
     } 
    } 
} 

public interface INotifiable { 

    void Notify(object data); 
} 


public class ConsumerPage : PhoneApplicationPage, INotifiable { 

    public ConsumerPage() { 

     NotificationCenter.Default.Register("event", this); 
    } 

    private Notify(object data) { 

     //do what you want 
    } 
} 

public class OtherPage : PhoneApplicationPage { 

    public OtherPage() { 

     NotificationCenter.Default.Send("event", "Hello!"); 
    } 
}