我目前正在玩弄 MVVM 模式并尝试命令。我发现默认方式(每个 Command 类都需要从ICommand
接口实现)很无聊,所以我创建了一个新的基类,名为,等待它,CommandBase
. 它看起来像这样:
public abstract class CommandBase : ICommand
{
public virtual bool CanExecute(object parameter)
{
return true;
}
public virtual event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public virtual void Execute(object parameter)
{
}
}
现在每个命令都只是从这个基类继承并覆盖必要的。我在软件中有一个错误,所以我在我的继承类和这个基类中放置了几个断点。一切似乎都按预期工作,除了一件事 - 该方法CanExecute
一直被触发。如果我将断点放在方法中,我的应用程序甚至都不会启动!如果我删除这个断点,一切都会重新开始。
主视图模型:
public class MainViewModel : ViewModelBase // base implements INotifyPropertyChanged
{
public ICommand NavigateCommand { get; private set; }
public MainViewModel()
{
NavigateCommand = new NavigateCommand(this);
}
}
我的调试器进入构造函数,实例化 Command 类,从现在开始,CanExecute 方法会疯狂地触发,我什至无法打开应用程序窗口,因为 vs 调试器不允许我这样做。在我的 NavigateCommand 中,我只覆盖Execute
方法并设置 MainViewModel 的一个属性,没什么太花哨的。CanExecute
保持不变而没有覆盖。
请注意,我提到的错误只是我的视图的错字,与此问题无关。在我修复它之后,除了这个东西之外,代码都可以工作。
有人可以解释为什么它会这样吗?