Question

Je suis nouveau à WP7 et à venir du développement iPhone. Sur l'iPhone, je suis habitué à utiliser NSNotificationCenter pour notifier mon programme de quelque chose. NSNotificationCenter est montée dans le cadre de sortir des sentiers battus. Y at-il quelque chose de similaire à WP7? Je suis tombé uppon MVVM Light Toolkit, mais je ne suis pas sûr de savoir comment l'utiliser correctement.

Ce que je veux faire:

  • Inscrivez-vous à une notification-Id et faire quelque chose quand Notification-Id est reçu
  • Envoyer une notification par notification-Id et un contexte (objet de passer aux observateurs)
  • Tout le monde qui enregistre à la même notification-Id sera informé

Alors quelque chose comme: Enregistrement

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

Envoi:

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

Exemple pour l'enregistrement:

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

Envoi ...

NotificationCenter.Default.send(NotifyEnum.SayHello, "stackoverflow context");
Était-ce utile?

La solution

Voici comment faire avec le Light Toolkit MVVM:

Enregistrement:

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

Envoi:

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

Autres conseils

http: //www.silverlightshow .net / articles / exécution-Push-Notifications-en-windows Phone-7.aspx , vous trouverez un excellent exemple sur la façon d'utiliser la notification push sur windows phone 7.

Je suis sûr que vous archivez le même résultat que NSNotificationCenter en créant un singleton qui contient une liste d'observables qui implémente une interface spécifique en fonction de vos besoins bussiness, ou appelez un lamba, ou déclencher un événement, pour chaque message Envoyé par cette singleton vous interate la liste des observables et en vérifiant l'identifiant de message, une fois que vous trouverez un ou plusieurs, vous pouvez appeler la méthode d'interface, ou exécuter l'expression lambda ou déclencher l'événement défini pour digérer le contenu du message.

Quelque chose comme ci-dessous:

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!");
    }
 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top