Windows Phone 7, эквивалентный NSNotificationCenter?
-
10-10-2019 - |
Вопрос
Я новичок в WP7 и прихожу из разработки iPhone. На iPhone я использовал NSNotificationCenter, чтобы уведомить мою программу чего -либо. NSNotificationCenter вписывается в рамку из коробки. Есть ли что -то подобное в WP7? Я наткнулся на инструментарий MVVM-Light, но я не уверен, как правильно его использовать.
Что я хочу сделать:
- Зарегистрируйтесь на идентификатор уведомлений и сделайте что-то, когда получен идентификатор уведомлений
- Отправить уведомление с 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");
Решение
Вот как это сделать с инструментарием 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);
Другие советы
Здесь http://www.silverlightshow.net/items/implementing-push-notifications-in-windows-phone-7.aspx Вы найдете отличный пример того, как использовать Push -уведомление на Windows Phone 7.
Я почти уверен, что вы архивируете тот же результат, что и 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!");
}
}