簡體   English   中英

WPF MVVM 事件訂閱

[英]WPF MVVM Event Subscription

為簡單起見,有一個模型視圖(MyModelView),其中包含一個調度程序屬性,其中有一個定時器(調度程序)。 計時器用於檢查當前時間,如果它們匹配,則發出“事件匹配”信號,應該以某種方式通知模型視圖。 現在 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 完成的?

您正在嘗試向 MyModelView 公開的事件添加額外的處理程序,而不是處理該事件(這是無效的語法)。

您應該執行以下操作來訂閱該事件:

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

private void OnHasEvents(object sender, EventArgs e) {
    // TODO: Do something here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM