我目前正在尝试使用MVVM模式并尝试命令。我发现默认的方式(每个Command类需要实现从ICommand
接口)很无聊,所以我创建了一个新的基类叫做,等待它,CommandBase
。它看起来像这样:CanExecute断点不允许我使用应用程序
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
一直被解雇。如果我在方法中放置断点,我的应用程序甚至不会启动! 如果我删除这个断点,一切都会重新运行。
MainViewModel:
public class MainViewModel : ViewModelBase // base implements INotifyPropertyChanged
{
public ICommand NavigateCommand { get; private set; }
public MainViewModel()
{
NavigateCommand = new NavigateCommand(this);
}
}
我的调试器获取到构造函数,实例化的方法CanExecute火灾像疯了似的指挥类,从现在,我甚至不能打开应用程序窗口,因为与调试不让我。在我的NavigateCommand中,我只覆盖了Execute
方法并设置了MainViewModel的一个属性,没什么太花哨。 CanExecute
保持不变而不覆盖。
只是说明一点,我提到的错误只是我的视图的一个错误,它与这个问题没有关系。在我修好之后,代码就可以工作,除了这个东西。
有人可以提供解释为什么它的行为是这样的吗?
看一看[这里](http://stackoverflow.com/a/14294916/2132796)。 – Herdo
@Herdo,感谢您的链接,现在更清晰。如果我理解正确,解决此问题的唯一方法是尽可能缩短此方法以防止出现任何错误并忘记调试它? – walther
是的,这是'正常的'行为,'CanExecute'被解雇了很多。 你不应该尝试用这种方法进行调试。如果出现未知错误,请在调试时打开“Common Language Runtine Exeptions” - >例外... – Herdo