1

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

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

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

Так сома ething как: Регистрация

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"); 

ответ

4

Вот как это сделать с помощью 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

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

+0

За то, что я понимаю Нажмите уведомления онлайн на основе правильно? Или есть автономные Push-уведомления, такие как локальные уведомления в iOS для WP7? Потому что мне просто нужны уведомления внутри моего приложения и не нужно онлайн-соединение. – Buju 2010-12-09 14:09:11

+0

Насколько я знаю, это только для онлайн-уведомлений. Я не знаю, есть ли для офлайн, но я думаю, что нет. Это подразумевает многозадачность, где ваши приложения будут работать в фоновом режиме. – Mariusz 2010-12-09 15:54:18

0

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

Что-то, как показано ниже:

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!"); 
    } 
}