Windows Phone 7 эквивалентен NSNotificationCenter?

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

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

  • Зарегистрируйтесь в Notification-Id и сделайте что-нибудь, когда Notification-Id получен
  • Отправить уведомление с идентификатором уведомления и контекстом (объект для передачи наблюдателям)
  • Все, кто зарегистрируется с одним и тем же 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");

person Buju    schedule 09.12.2010    source источник


Ответы (3)


Вот как это сделать с помощью 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);
person Olivier Payen    schedule 09.12.2010
comment
ааа спасибо. Итак, я должен использовать свой Notification-Id в качестве токена при регистрации/отправке в MVVM, верно? - person Buju; 09.12.2010
comment
Точно. Токен может быть любым типом объекта - person Olivier Payen; 09.12.2010
comment
Спасибо, так что MVVM немного отличается, мне нравится ... Messenger.Default.Send‹Context-Type›(context-object, NotificationId) ... вот почему я был немного сбит с толку. Еще раз спасибо. - person Buju; 09.12.2010

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

person Mariusz    schedule 09.12.2010
comment
Насколько я понимаю, Push-уведомления онлайн, верно? Или есть автономные push-уведомления, такие как локальные уведомления на iOS для WP7? Потому что мне просто нужны уведомления внутри моего приложения и не нужно подключение к сети. - person Buju; 09.12.2010
comment
Насколько я знаю, это только для онлайн-уведомлений. Не знаю, есть ли для офлайна, но думаю, что нет. Это подразумевает многозадачность, когда ваши приложения будут работать в фоновом режиме. - person Mariusz; 09.12.2010

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

Что-то вроде ниже:

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!");
    }
 }
person ararog    schedule 27.08.2014