繁体   English   中英

在事件和RelayCommand(C#)中感到困惑

[英]Confused in Events & RelayCommand (C#)

我是活动的初学者,尝试构建MVVM ...

**问题1:

参考一些使用事件覆盖ArrayList类的在线示例: http : //msdn.microsoft.com/zh-cn/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中,然后同时从ConfigurationManager中删除该方法呢?

提前致谢。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM