1

Je suis nouveau sur WP7 et je viens du développement de l'iPhone. Sur iPhone, j'ai l'habitude d'utiliser NSNotificationCenter pour notifier mon programme de quelque chose. NSNotificationCenter est construit dans le cadre hors de la boîte. Y a-t-il quelque chose de similaire dans WP7? J'ai trébuché MVMP-Light Toolkit mais je ne suis pas sûr de savoir comment l'utiliser correctement.Windows Phone 7 équivalent à NSNotificationCenter?

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 transmettre aux observateurs)
  • Toute personne qui enregistre la même notification-Id sera informé

Alors som ething comme: Enregistrement

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

Envoi:

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

Exemple d'enregistrement:

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

Envoi en cours ...

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

Répondre

4

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); 
+0

aahh thx. Je dois donc utiliser mon Notification-Id comme Token pour enregistrer/envoyer MVVM, n'est-ce pas? – Buju

+0

Exactement. Le jeton peut être n'importe quel type d'objet –

+0

Thx, donc MVVM est un peu plus éloigné, j'aime ... Messenger.Default.Send (context-object, NotificationId) ... c'est pourquoi j'étais un peu confus. Merci encore. – Buju

0

Ici http://www.silverlightshow.net/items/Implementing-Push-Notifications-in-Windows-Phone-7.aspx, vous trouverez un grand exemple sur comment utiliser pousser notification sur windows phone 7.

+0

Pour ce que je comprends notifications Push sont basées en ligne? Ou existe-t-il des notifications Push hors connexion comme les notifications locales sur iOS pour WP7? Parce que j'ai juste besoin de notifications dans mon application et que je n'ai pas besoin d'une connexion en ligne. – Buju

+0

Pour autant que je sache, c'est seulement pour les notifications en ligne. Je ne sais pas s'il y en a pour hors ligne, mais je ne le pense pas. Cela impliquerait le multitâche, où vos applications fonctionneraient en arrière-plan. – Mariusz

0

Je suis assez 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, ou appelle un ba, ou déclencher un événement, pour chaque message envoyé par ce singleton vous interférerez la liste des observables et vérifier l'identifiant du message, une fois que vous en trouvez un ou plus, vous pouvez appeler la méthode 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!"); 
    } 
}