Кнопка всегда в отключенном состоянии

У меня есть кнопка с простой привязкой команды на мой взгляд:

<Window ...>
    <Window.DataContext>
        <vm:ShellViewModel />
    </Window.DataContext> 
    ...
    <Button Command="{Binding DoSomethingCoolCommand}" Content="Execute" />

И вм:

public class ShellViewModel : ObservableObject {

    private RelayCommand _doSomethingCoolCommand;

    public ICommand DoSomethingCoolCommand {
        get {
            return _doSomethingCoolCommand ??
                (_doSomethingCoolCommand = new RelayCommand(DoSomethingCool));
        }
    }

    private void DoSomethingCool() { ... }

Тем не менее, кнопка отключена при запуске приложения / просмотра, и я не могу включить ее. Я попытался передать оценку выполнения команды RelayCommand а также установить IsEnabled на вид. Я что-то пропустил?


редактировать

RelayCommand и ObservableObject взяты из базового проекта mvvm, как указано в тегах. Ссылка: https://mvvmfoundation.codeplex.com/

1 ответ

Вы проверили, есть ли у какого-либо из родителей Кнопок состояние "отключено"? Это также отключило бы все дочерние элементы управления.

На заметку:

Вы никогда не звоните CommandManager.InvalidateRequerySuggested() и это не реализовано в RelayCommand´ class, just the registration of events, as seen [here][1]. ICommand or RelayCommand never does invalidate update it's state by default. You got to do this. Either by callingCommandManager.InvalidateRequerySuggested()`, который предложит запрос всех зарегистрированных команд (поскольку действие в кнопке 1 может влиять на многие другие команды).

Например, может быть IsProcessing свойство и когда его значение изменяется, вы можете позвонить CommandManager.InvalidateRequerySuggested() обновить состояние всех других команд.

Другие вопросы по тегам