Сейчас я работаю над своим первым большим приложением WPF MVVM, которое использует MVVM Light Toolkit в сочетании с RelayCommand Джоша Смита. Проблема, с которой я столкнулся, заключается в том, что я привязал эту команду к элементу в ContextMenu, который постоянно отключен.
Вот фрагмент кода MenuItem:
<MenuItem
Header="Verwijderen"
Command="{StaticResource DeleteNoteCommandReference}"
CommandParameter="{Binding}" />
Вот что я сделал с привязкой команд: я использовал класс под названием CommandReference, который нашел здесь.
Это сама ссылка на команду:
<command:CommandReference
x:Key="DeleteNoteCommandReference"
Command="{Binding DeleteNoteCommand}" />
Причина, по которой я сделал это, - это проблемы с привязкой команд к ContextMenu, которые я заметил (вызванные тем фактом, что ContextMenu не является частью логического / визуального дерева). Я нашел несколько тем по этой теме в сети, и в некоторых из них я заметил класс CommandReference, который показался мне хорошим решением моей проблемы. Эти проблемы с привязкой команд действительно исчезли, но кажется, что CanExecute моей команды не распознается или что-то в этом роде, потому что MenuItem остается отключенным.
В ViewModel (который привязан к представлению как его DataContext) у меня есть следующий код для команды:
/// <summary>
/// Command for deleting a note.
/// </summary>
public RelayCommand<NoteViewModel> DeleteNoteCommand {
get;
private set;
}
/// <summary>
/// CanExecute method for the DeleteNoteCommand.
/// </summary>
/// <param name="note">The NoteViewModel that CanExecute needs to check.</param>
/// <returns>True if the note can be deleted, false otherwise.</returns>
public bool DeleteNoteCommandCanExecute(NoteViewModel note) {
return Notes.Contains(note);
}
/// <summary>
/// Creates all commands for this ViewModel.
/// </summary>
private void CreateCommands() {
DeleteNoteCommand = new RelayCommand<NoteViewModel>(param => DeleteNote(param), param => DeleteNoteCommandCanExecute(param));
}
Что мне здесь не хватает, чтобы мой код работал? Я подумал, что это может иметь какое-то отношение к CommandReference, который я использую, но я не знаю, что искать.
Очень надеюсь, что вы, ребята, сможете помочь!