Вопрос

Я новичок в 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!");
    }
 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top