Я пишу WPF 4 приложения (с VS2010 RC) с использованием MVVM Light V3 альфа 3 и бегом в какое-то странное поведение здесь ...CanExecute на RelayCommand <T> не работает
У меня есть команда, которая открывает Window
, и это окно создает ViewModel и т. Д. - там ничего странного.
В этом Window
У меня несколько RelayCommand
с, например:
CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true);
Ничего странного снова - он работает, как я ожидал.
Проблема в том, что у меня не может быть метода CanExecute/лямбда-выражения с общим RelayCommand.
Это работает:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory);
Но это не делает:
DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory, CanDeleteCategory);
Окно не отображается. Я имею в виду, я нажимаю кнопку, которая открывает окно, и приложение просто блокируется, и через несколько секунд, InitializeComponent
метод окна бросков (ссылка на объект не указывает на экземпляр объекта) в NullReferenceException
Короче говоря, если Я положил метод CanExecute
на RelayCommand<T>
, Window
, что принадлежит, что ViewModel (с RelayCommand<T>
) не может быть создан. Если я удалю CanExecute
, появится сообщение Window
.
Где находится проблема? Я смущен.
спасибо.
EDIT: В соответствии с просьбой, вот трассировки стека:
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 System.Windows.Controls.Primitives.ButtonBase.OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.FrameworkElement.OnPropertyChanged(DependencyPropertyChangedEventArgs e) at System.Windows.DependencyObject.NotifyPropertyChange(DependencyPropertyChangedEventArgs args) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) at MS.Internal.Xaml.Runtime.ClrObjectRuntime.SetValue(Object inst, XamlMember property, Object value) at MS.Internal.Xaml.Runtime.PartialTrustTolerantRuntime.SetValue(Object obj, XamlMember property, Object value) at System.Xaml.XamlObjectWriter.Logic_ApplyPropertyValue(ObjectWriterContext ctx, XamlMember prop, Object value, Boolean onParent) at System.Xaml.XamlObjectWriter.Logic_DoAssignmentToParentProperty(ObjectWriterContext ctx) at System.Xaml.XamlObjectWriter.WriteEndObject() at System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 stack, IStyleConnector styleConnector) at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator) at ApuntaNotas.Views.CategoryEditorView.InitializeComponent() in c:\Users\Jesus\Documents\Visual Studio 2010\Projects\ApuntaNotas\ApuntaNotas\Views\CategoryEditorView.xaml:line 1 at ApuntaNotas.Views.CategoryEditorView..ctor() in C:\Users\Jesus\Documents\Visual Studio 2010\Projects\ApuntaNotas\ApuntaNotas\Views\CategoryEditorView.xaml.cs:line 18 A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll
Возможно, вы можете приложить трассировку стека? Это может помочь понять, что пошло не так. – Vlad
Извините, я это забыл :) –
Странно: Reflector сообщает, что функция 'CanExecute' определена таким образом:' public bool CanExecute (object parameter) {return (this._canExecute == null) | | this._canExecute ((T) параметр)); } '. Нечего исключать. – Vlad