Кнопка всегда в отключенном состоянии
У меня есть кнопка с простой привязкой команды на мой взгляд:
<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 calling
CommandManager.InvalidateRequerySuggested()`, который предложит запрос всех зарегистрированных команд (поскольку действие в кнопке 1 может влиять на многие другие команды).
Например, может быть IsProcessing
свойство и когда его значение изменяется, вы можете позвонить CommandManager.InvalidateRequerySuggested()
обновить состояние всех других команд.