Why is a button enabled if the Command binding resolves to null?
c#, mvvm, wpf
Solution
It is enabled because that's the default state. Disabling it automatically would be an arbitrary measure that gives rise to other problems.
If you want to have a button without an associated command be disabled, bind the `IsEnabled` property to `SomeCommand` using an appropriate converter, e.g.:
[ValueConversion(typeof(object), typeof(bool))]
public class NullToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value !== null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
Problem
OK, the XAML is quite simple and uses MVVM to bind to an `ICommand SomeCommand { get; }` property on a view model: ``` <Button Command="{Binding Path=SomeCommand}">Something</Button> ``` If `SomeCommand` returns `null`, the button is enabled. (Nothing to do with `CanExecute(object param)` method on `ICommand`, because there is no instance to call that method on) And now the question: Why is the button enabled? How would you work it around? If you press the "enabled" button, obviously nothing is called. It is just ugly that the button looks enabled.