Событие потребления в WPF - PullRequest
0 голосов
/ 02 апреля 2012

У меня есть очень простое приложение, написанное на Silverlight для Windows Phone, где я пытаюсь использовать события.В моем коде App.xaml.cs я реализовал GeoCoordinateWatcher, который регистрирует метод gCWatche_PositionChanged.Это работает нормально, метод вызывается после изменения позиции. Я хочу запустить другое событие. Допустим, DBUpdatedEvent после обновления БД в методе gCWatche_PositionChanged.

Для этого я объявил в файле App.xaml.cs

public delegate void DBUpdateEventHandler(object sender, EventArgs e);

и у меня в классе приложения:

   public event DBUpdateEventHandler DBUpdated;

событие запускается так в конце метода gCWatche_PositionChanged следующим образом:

       OnDBUpdateEvent(new EventArgs());

, а также у меня естьобъявлено:

    protected virtual void OnDBUpdateEvent(EventArgs e)
    {

        if (DBUpdated != null)
        {

            DBUpdated(this, e);
        }

    }

Теперь мне нужно использовать это событие на моей другой странице приложения для Windows Phone , которая является отдельным классом PhoneApplicationPage.

Итак, я объявил этот метод на другой телефонной странице:

    public void DBHasBeenUpdated(object sender, EventArgs e)
    {
        Debug.WriteLine("DB UPDATE EVENT CATCHED");
    }

И в конструкторе этой страницы я объявил:

        DBUpdateEventHandler dbEH = new DBUpdateEventHandler(DBHasBeenUpdated);

Но когда я тестирую, событие приложения срабатывает (OnDBUpdateEventвызывается, но DBUpdated имеет значение null, поэтому DBUpdated не вызывается - странно), и у меня проблема в том, что другая телефонная страница вообще не перехватывает событие ...

Есть предложения?Как поймать это событие.

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вы должны создать событие как статическое событие.

public static event DBUpdateEventHandler DBUpdated;

И обработчик должен быть присоединен к событию, как показано ниже в конструкторе вашей страницы:

App.DBUpdated+=new DBUpdateEventHandler(DBHasBeenUpdated);
0 голосов
/ 02 апреля 2012

Когда мы хотим зарегистрироваться на событие, мы делаем это следующим образом:

class A
{
    public event DBUpdateEventHandler DBUpdated;
}

class B
{
    private A _a;
    //let requirement want to register when the object is initialized
    constructor()
    {
        _a = new A();
        _a.DBUpdated += OnDBUpdateEvent;
    }
}

В вашем случае вы можете сделать ваше событие статическим членом. и зарегистрируйтесь в ней в PhoneApplicationPage как:

App.DBUpdated -= DBHasBeenUpdated;
App.DBUpdated += DBHasBeenUpdated;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...