Domanda

Sono nuovo di WP7 e provenienti dallo sviluppo iPhone. Su iPhone Sono abituato a usare NSNotificationCenter per notificare il mio programma di qualcosa. NSNotificationCenter è build-in del fuori quadro della scatola. C'è qualcosa di simile a WP7? Mi sono imbattuto uppon MVVM-Light Toolkit, ma non sono sicuro di come usarlo correttamente.

Quello che voglio fare:

  • Registra per una notifica-Id e fare qualcosa quando viene ricevuto notifica-Id
  • inviare una notifica con Notification-Id e un contesto (oggetto di passare agli osservatori)
  • Tutti coloro che si registra per la stessa notifica-Id sarà notificato

Quindi, qualcosa di simile: Registrazione

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

Invio:

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

Esempio per la registrazione:

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

Invio ...

NotificationCenter.Default.send(NotifyEnum.SayHello, "stackoverflow context");
È stato utile?

Soluzione

Ecco come fare con la luce MVVM Toolkit:

Registrazione:

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

Invio:

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

Altri suggerimenti

http: //www.silverlightshow .net / articoli / esecuzione-Push-notifiche-in-Windows-Phone-7.aspx si trova un grande esempio su come utilizzare notifiche push su Windows Phone 7.

Sono abbastanza sicuro che si archivia lo stesso risultato di NSNotificationCenter con la creazione di un singleton che contiene un elenco di osservabili che implementa un'interfaccia specifica in base ai requisiti di bussiness, o chiamare un Lamba, o di attivare un evento, per ogni messaggio inviati da questo Singleton si interate l'elenco dei osservabili e controllare il messaggio di id, una volta a trovare uno o più, si può chiamare il metodo di interfaccia, o eseguire l'espressione lambda o attivare l'evento definito a digerire il contenuto del messaggio.

Qualcosa di simile di seguito:

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!");
    }
 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top