我正在使用MVVM Light V3 alpha 3编写一个WPF 4应用程序(使用VS2010 RC),并且在这里遇到了一些奇怪的行为......
我有一个打开a的命令,Window那个Window创建了ViewModel等等 - 那里没什么奇怪的.
在那Window我有一些RelayCommands,例如:
CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true);
Run Code Online (Sandbox Code Playgroud)
没有什么奇怪的 - 它按照我的预期工作.
问题是我不能使用通用RelayCommand的CanExecute方法/ lambda表达式.
这有效:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory);
Run Code Online (Sandbox Code Playgroud)
但这不是:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory, CanDeleteCategory);
Run Code Online (Sandbox Code Playgroud)
窗口没有出现.我的意思是,我单击打开窗口的按钮,应用程序刚刚被阻止,几秒钟后,Window的InitializeComponent方法抛出一个NullReferenceException(对象引用未设置为对象的实例)
简而言之,如果我将一个CanExecute方法放在a上RelayCommand<T>,Window那么拥有 ViewModel(带有)的那个RelayCommand<T>就无法实例化.如果我删除了CanExecute,Window显示出来.
这里的问题在哪里?我糊涂了.
谢谢.
编辑:根据要求,这是堆栈跟踪:
A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll at GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(Object parameter) at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute() at …