WPF: MVVM - отключить кнопку, если команда пуста - PullRequest
4 голосов
/ 03 марта 2011

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

<Button Command="{Binding Save}" />

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

Решение: WPF / MVVM: отключить состояние кнопки, когда ViewModel за UserControl еще не инициализирован?

Ребята,спасибо за ваши ответы и извините за дублирование вопроса.

Ответы [ 5 ]

6 голосов
/ 03 марта 2011

Определите команду, которая всегда возвращает false в CanExecute.Объявите это в глобальной позиции, такой как в вашем App.Xaml.затем вы можете указать эту пустую команду как FallbackValue для всех ваших командных привязок. Сначала вы ожидаете нулевое значение.

<Button Command="{Binding Save,FallbackValue={StaticResource KeyOfYourEmptyCommand}}" /> 
5 голосов
/ 03 марта 2011

Вы можете создать триггер в XAML, который отключит кнопку, когда команда равна x:Null.

Пример можно найти в ответе на этот вопрос: WPF / MVVM: отключить состояние кнопки, когда ViewModel за UserControl еще не инициализирован?

1 голос
/ 03 марта 2011

Создайте NullToBooleanConverter и свяжите свойство IsEnabled с командой, запустив ее через конвертер:

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 NotImplementedException();
    }
}

Тогда

<UserControl.Resources>
   <Extentions:NullToBooleanConverter x:Key="NullToBooleanConverter" />
</UserControl.Resources>
<Button Content="Hello" IsEnabled="{Binding Save, Converter={StaticResource NullToBooleanConverter}}" />
1 голос
/ 03 марта 2011
1 голос
/ 03 марта 2011

Я не уверен, что вы сможете достичь этого. Однако альтернативой может быть первоначальная инициализация объекта Command с помощью базовой ICommand, где CanExecute просто возвращает False. Затем вы можете заменить это, когда будете готовы поставить настоящую команду на место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...