在事件中困惑&;中继命令(C#)

在事件中困惑&;中继命令(C#),c#,wpf,visual-studio-2010,events,mvvm,C#,Wpf,Visual Studio 2010,Events,Mvvm,我是一名项目初学者,试图构建一个MVVM **问题1: 参考一些使用事件重写ArrayList类的联机示例: 如果我通过向被重写类中添加事件来重写任何类,那么每当被重写类中的任何成员/方法被更改/调用时,OnChanged方法将自动运行,这样说对吗?(调试时我可以看到它?) **问题2: 很抱歉,您对RelayCommand内部的操作感到非常困惑。具体来说,为什么在EventHandler中CanExecuteChange会同时在ConfigurationManager中添加然后删除该方法 提

我是一名项目初学者,试图构建一个MVVM

**问题1:

参考一些使用事件重写ArrayList类的联机示例:

如果我通过向被重写类中添加事件来重写任何类,那么每当被重写类中的任何成员/方法被更改/调用时,OnChanged方法将自动运行,这样说对吗?(调试时我可以看到它?)

**问题2:

很抱歉,您对RelayCommand内部的操作感到非常困惑。具体来说,为什么在EventHandler中CanExecuteChange会同时在ConfigurationManager中添加然后删除该方法


提前谢谢。

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

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);}
    ...
}