C# WPF MVVM事件订阅

C# WPF MVVM事件订阅,c#,wpf,events,mvvm,C#,Wpf,Events,Mvvm,为了简单起见,我们有一个modelview(MyModelView),它包含一个调度程序属性,该属性中有一个计时器(调度程序)。计时器用于对照当前时间进行检查,如果它们匹配,则发出“事件匹配”信号,modelview应以某种方式得到通知。现在MyModelView知道了调度程序,但却不知道其他的方法 public Scheduler() { ScheduleCollection = new ObservableCollection<Schedule>();

为了简单起见,我们有一个modelview(MyModelView),它包含一个调度程序属性,该属性中有一个计时器(调度程序)。计时器用于对照当前时间进行检查,如果它们匹配,则发出“事件匹配”信号,modelview应以某种方式得到通知。现在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;
公共调度程序() { ScheduleCollection=新的ObservableCollection(); TimeSpan ts=新的TimeSpan(30000); _计时器=新调度程序(); _时间间隔=ts; _timer.Tick+=新的EventHandler(EventTimerCheck_Tick); _timer.Start(); } 私有void EventTimerCheck_Tick(对象发送方,EventArgs e) { eventsToLaunch=LocateCurrentEvents(); 如果(eventsToLaunch.Count>0){RaiseHasEvents();} } 公共无效的RaiseHaseEvents() { EventHandler=this.HasEvents; if(处理程序!=null) { var e=新事件参数(); 处理者(本,e); } } 公共事件事件处理程序;
公共MyModelView(
public)
{
调度器调度器=新调度器();

HaveEvents+=scheduler.HasEvents;您正在尝试向MyModelView公开的事件添加其他处理程序,而不是处理该事件(这是无效语法)

您应该执行以下操作来订阅活动:

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

private void OnHasEvents(object sender, EventArgs e) {
    // TODO: Do something here
}
public MyModelView() {
    Scheduler scheduler = new Scheduler();
    scheduler.HasEvents += OnHasEvents;
    // ...
}

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