0

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

**问题 1:

参考一些使用事件覆盖 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 中删除方法?

提前致谢。

4

1 回答 1

0

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

于 2013-11-11T19:11:59.933 回答