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