Подписка на события WPF MVVM - PullRequest
2 голосов
/ 22 июля 2011

Для простоты есть представление модели (MyModelView), которое содержит свойство Scheduler, в котором есть таймер (Scheduler).Таймер используется для проверки текущего времени и, если они совпадают, сигнализирует о «совпадении событий», о котором каким-либо образом должен быть уведомлен вид модели.Теперь MyModelView знает о планировщике, но не наоборот.

public Scheduler()
    {
        ScheduleCollection = new ObservableCollection<Schedule>();

        TimeSpan ts = new TimeSpan(30000);

        _timer = new DispatcherTimer();
        _timer.Interval = ts;
        _timer.Tick += new EventHandler(EventTimerCheck_Tick);
        _timer.Start();

    }
private void EventTimerCheck_Tick(object sender, EventArgs e) 
    {
        eventsToLaunch = LocateCurrentEvents();

        if (eventsToLaunch.Count > 0) { RaiseHasEvents(); }
    }

public void RaiseHasEvents()
    {
       EventHandler handler = this.HasEvents;
        if (handler != null)
        {
            var e = new EventArgs();
            handler(this, e);
        }
    }

public event EventHandler HasEvents;

public MyModelView()
   {

       Scheduler scheduler = new Scheduler();

       HaveEvents += scheduler.HasEvents; <----*throws Error below
    }

   internal event EventHandler HaveEvents;
  • Scheduler.HasEvents 'может отображаться только в левой части + = или - = (кроме случаев использования внутри типа)

Как мне вызвать событие, на которое MyModelView может подписаться?Или это достигается с помощью RelayCommanding?

1 Ответ

6 голосов
/ 22 июля 2011

Вы пытаетесь добавить дополнительные обработчики к событию, отображаемому вашим MyModelView, а не обрабатывать событие (это недопустимый синтаксис).

Чтобы подписаться на событие, вы должны сделать что-то вроде следующего:

public MyModelView() {
    Scheduler scheduler = new Scheduler();
    scheduler.HasEvents += OnHasEvents;
    // ...
}

private void OnHasEvents(object sender, EventArgs e) {
    // TODO: Do something here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...