Windows Phone 7 эквивалентен NSNotificationCenter? - PullRequest
1 голос
/ 09 декабря 2010

Я новичок в WP7 и пришел с разработки для iPhone.На iPhone я привык использовать NSNotificationCenter для уведомления моей программы о чем-либо.NSNotificationCenter является встроенной структурой из коробки.Есть ли что-то подобное в WP7?Я споткнулся об MVPM-Light Toolkit, но я не уверен, как правильно его использовать.

Что я хочу сделать:

  • Зарегистрируйтесь на Notification-Id и сделайте что-нибудь, когдаИдентификатор уведомления получен
  • Отправка уведомления с идентификатором уведомления и контекстом (объектом для передачи наблюдателям)
  • Каждый, кто регистрируется на тот же идентификатор уведомления, получит уведомление

Так что-то вроде: Регистрация

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

Отправка:

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

Пример регистрации:

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

Отправка ...

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

Ответы [ 3 ]

4 голосов
/ 09 декабря 2010

Вот как это сделать с помощью MVVM Light Toolkit:

Регистрация:

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

Отправка:

Messenger.Default.Send<string>("My message", NotificationId);
0 голосов
/ 27 августа 2014

Я почти уверен, что вы архивируете тот же результат, что и NSNotificationCenter, создав единый объект, содержащий список наблюдаемых, который реализует определенный интерфейс на основе ваших требований к бизнесу, или вызывает лямбу или запускает событие для каждого сообщения.отправленный этим синглтоном, вы включаете список наблюдаемых и проверяете идентификатор сообщения. Как только вы найдете одно или несколько, вы можете вызвать метод интерфейса, или выполнить лямбда-выражение, или вызвать событие, определенное для переваривания содержимого сообщения.

Примерно так:

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!");
    }
 }
0 голосов
/ 09 декабря 2010

Здесь http://www.silverlightshow.net/items/Implementing-Push-Notifications-in-Windows-Phone-7.aspx вы найдете отличный пример того, как использовать push-уведомления на Windows Phone 7.

...