Frage

Ich bin neu in WP7 und kommt von iPhone Entwicklung. Auf dem iPhone Ich bin es gewohnt, NSNotificationCenter zu verwenden, um mein Programm von etwas mitzuteilen. NSNotificationCenter ist build-in Rahmen aus der Box. Gibt es etwas ähnliches in WP7? Ich stolperte uppon MVVM-Light Toolkit, aber ich bin nicht sicher, wie es richtig zu verwenden.

Was ich tun möchte:

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

So etwas wie: Registrieren von

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

Senden:

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

Beispiel für die Registrierung:

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

Senden ...

NotificationCenter.Default.send(NotifyEnum.SayHello, "stackoverflow context");
War es hilfreich?

Lösung

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

Speichern:

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

Senden:

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

Andere Tipps

Hier http: //www.silverlightshow .net / Artikel / Führungs-Push-Benachrichtigungen in Windows-Phone-7.aspx Sie werden ein großartiges Beispiel finden, wie Push-Benachrichtigung auf Windows verwenden, Telefon 7.

Ich bin mir ziemlich sicher, dass Sie das gleiche Ergebnis wie NSNotificationCenter Archivierung durch einen Singleton zu schaffen, die eine Liste von Observablen hält, dass eine bestimmte Schnittstelle implementiert basierend auf Ihren bussiness Anforderungen oder eine lamba nennen, oder ein Ereignis auslösen, für jede Nachricht abgeschickt dieses Singleton Sie die Liste der Observablen wird Interate und die Nachrichten-ID überprüft, wenn Sie ein oder mehrere finden, können Sie die Interface-Methode aufrufen, oder die Lambda-Ausdruck ausführen oder das Ereignis auslösen definiert 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!");
    }
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top