c# - WPF MVVM 事件订阅

标签 c# wpf events mvvm

为了简单起见,有一个模型 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/

相关文章:

c# - 如何捕获 AutoCAD.NET 中抛出的未处理异常

c# - 在数据库中插入记录时连接必须有效且打开

wpf - WPF 中的 slider "animation"?

wpf - WPF失去焦点时不按下按钮

c# - RefCount 在 AtlUnadvise 调用后保持不变

c# - 在 C# 中将事件从一个窗体传播到另一个窗体

c# - 从 IViewComponentHelper 扩展方法中调用 Component.InvokeAsync()

c# - 单击鼠标时获取鼠标光标下的元素名称

jquery - ASP.NET WebForms/jQuery : jQuery . 按钮上的单击事件使按钮的服务器端 OnClick 事件无法触发

c# - Asp.Net Core 将 ViewComponent 渲染为变量