我正在使用MVVM Light V3 alpha 3编写一个WPF 4应用程序(使用VS2010 RC),在这里遇到了一些奇怪的行为...
我有一个命令,用于打开一个Window
,然后该Window
创建了ViewModel等内容 - 在这里没有任何奇怪的地方。
在那个Window
中,我有一些RelayCommand
,例如:
CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true);
再次没有什么奇怪的问题-它按照我预期的工作。
问题是我无法使用泛型RelayCommand具有CanExecute方法/lambda表达式。
这个可以工作:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory);
但这样不行:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory, CanDeleteCategory);
点击按钮后窗口没有弹出。我的意思是,我点击打开窗口的按钮时,应用程序会被阻塞,并且几秒钟后,窗口的 InitializeComponent 方法抛出了一个 NullReferenceException(对象引用未设置为对象的实例)。简而言之,如果在 RelayCommand<T> 上放置 CanExecute 方法,则拥有该 ViewModel(具有 RelayCommand<T>)的 Window 无法实例化。如果移除 CanExecute,则窗口将显示。
问题出在哪里?我很困惑。
谢谢。
编辑:根据要求,以下是堆栈跟踪信息:
CanExecute
是这样定义的:public bool CanExecute(object parameter) { return (this._canExecute == null) || this._execute((T)parameter)); }
。没有任何东西会抛出异常。 - Vladnull
? - Win4ster