Сейчас я работаю над своим первым большим приложением 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, который я использую, но я не знаю, что искать.
Очень надеюсь, что вы, ребята, можете помочь!