2011-07-22 242 views
2

为了简单起见,有一个模型视图(MyModelView),其中包含一个Scheduler属性,它内部有一个计时器(Scheduler)。计时器用于检查当前时间,如果它们匹配,则表示应该通知模型视图的'事件匹配'。现在MyModelView知道调度器,但不是相反。WPF MVVM事件订阅

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完成的吗?

回答

6

您正在尝试将其他处理程序添加到您的MyModelView公开的事件中,而不是处理该事件(这不是有效的语法)。

你应该做类似以下内容订阅事件:

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

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

太谢谢你了 – Casey