为了简单起见,有一个模型 View (MyModelView),其中包含一个 Scheduler 属性,该属性内部有一个计时器(Scheduler)。计时器用于检查当前时间,如果它们匹配,则发出“事件匹配”信号,模型 View 应该以某种方式得到通知。现在 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
}
关于c# - WPF MVVM 事件订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6784315/