【问题标题】:WPF MVVM Event SubscriptionWPF MVVM 事件订阅
【发布时间】:2011-07-22 00:06:48
【问题描述】:

为简单起见,有一个模型视图(MyModelView),其中包含一个调度程序属性,其中有一个定时器(调度程序)。计时器用于检查当前时间,如果它们匹配,则发出“事件匹配”信号,应该以某种方式通知模型视图。现在 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 完成的?

【问题讨论】:

    标签: c# wpf events mvvm


    【解决方案1】:

    您正在尝试向 MyModelView 公开的事件添加额外的处理程序,而不是处理该事件(这是无效的语法)。

    您应该执行以下操作来订阅该事件:

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

    【讨论】:

      猜你喜欢
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多