Как «отключить» кнопку в WPF с помощью шаблона MVVM?

Я пытаюсь понять WPF и MVVM и добился хорошего прогресса. Со стороны WPF и MVVM дела идут хорошо.

Однако, сторона XAML и привязки данных - это совсем другая история:)

Как бы я пошел по поводу «отключения» кнопки?

Например, я в моей модели просмотра есть свойство CanClose, которое определяет, может ли приложение быть закрыто в данный момент. Если рабочий поток не работает, тогда это свойство имеет значение false, и я хотел бы либо серым цветом кнопку, либо как-то визуально отключить кнопку «Закрыть» с помощью какого-либо связывания.

Как бы я поступил так?

Спасибо!

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

Жаль, что я могу принять только один ответ.

Эти два ответа мне очень помогли. В публикации Кента он пошел дальше, объяснив, почему вы должны внедрить командную инфраструктуру в свое приложение вместо того, чтобы отключать кнопку так, как я спросил:

Как «отключить» кнопку в WPF с помощью MVVM шаблон?

И ответ на мой первоначальный вопрос:

Как «отключить» кнопку в WPF с помощью шаблона MVVM?

21
задан Community 23 May 2017 в 12:03
поделиться

3 ответа

С помощью шаблона команд. В вашей модели представления:

public class MyViewModel : ViewModel
{
    private readonly ICommand someCommand;

    public MyViewModel()
    {
        this.someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething);
    }

    public ICommand SomeCommand
    {
        get { return this.someCommand; }
    }

    private void DoSomething(object state)
    {
        // do something here
    }

    private bool CanDoSomething(object state)
    {
        // return true/false here is enabled/disable button
    }
}

В вашем XAML:

<Button Command="{Binding SomeCommand}">Do Something</Button>

Прочтите этот пост , чтобы узнать больше о DelegateCommand .

34
ответ дан 29 November 2019 в 06:14
поделиться

Просто привяжите свойство IsEnabled кнопки к CanClose:

<Button IsEnabled="{Binding CanClose}"/>
38
ответ дан 29 November 2019 в 06:14
поделиться

Если вы вернете CanExecute для ICommand значение false, кнопка будет отключена. Итак, какая бы команда ни была связана с вашей кнопкой, посмотрите, можете ли вы вернуть CanExecute значение false, если хотите ее отключить.

10
ответ дан 29 November 2019 в 06:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: