【问题标题】:Confused in Events & RelayCommand (C#)对事件和中继命令感到困惑(C#)
【发布时间】:2013-11-11 18:10:37
【问题描述】:

我是Events的初学者,正在尝试构建一个MVVM......

**问题一:

参考一些使用事件覆盖 ArrayList 类的在线示例: http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

public delegate void ChangedEventHandler(object sender, EventArgs e);
public class ListWithChangedEvent: ArrayList 
{
    public event ChangedEventHandler Changed; 
    protected virtual void OnChanged(EventArgs e) {if (Changed != null) Changed(this, e);}
    ...
}

我是否正确地说,如果我通过向其中添加事件来覆盖任何类,每当被覆盖的类中的任何成员/方法被更改/调用时,方法 OnChanged 将自动运行? (而且调试的时候能看到?)

**问题2:

抱歉,我对 RelayCommand 内部的操作感到困惑。具体为什么在EventHandler CanExecuteChanged 中同时从ConfigurationManager 中添加然后Remove 方法?

提前致谢。

【问题讨论】:

    标签: c# wpf visual-studio-2010 events mvvm


    【解决方案1】:

    关于你的第一个问题,我认为你误解了一些东西;只是添加一个名为 OnChanged 的​​方法并没有你描述的效果。与任何其他方法一样,它必须由其他代码调用才能执行。由于基类及其方法对派生类一无所知,因此它们不会调用方法/事件——甚至“按照惯例”也不会,因为它被命名为 OnChange。
    我不确定我是否正确理解了您的第二个问题。 CanExecuteChanged 事件用于通知 UI 发生了影响命令是否可以执行的更改。我不知道您的代码或您所指的关于 ConfigurationManager 的示例,但删除和添加事件处理程序通常是为了断言事件处理程序只注册了一次。如果您多次注册一个事件处理程序,它就会被多次调用——这是一种很少有人想要的行为。因此,在重新注册之前删除事件处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      相关资源
      最近更新 更多