Silverlight / WPF: я не хочу, чтобы ICommand изменил свойство IsEnabled кнопки, возможно ли это? - PullRequest
3 голосов
/ 21 июля 2010

Скажем, у меня есть кнопка (MyButton), которая привязывается к:

public ICommand MyCommand { get; set; }

Я регистрирую эту команду с:

MyCommand = new DelegateCommand<object>(DoSomething);

Теперь, если я сделаю

MyButton.IsEnabled = false;

Он ничего не делает, то есть кнопка все еще включена. Я знаю, что команда вызывает это, потому что если я удалю новый код команды делегата, указанный выше, то кнопка будет отключена.

Мои вопросы:
1. Есть ли способ сообщить мне эту привязку к команде, чтобы не связываться с IsEnabled моей кнопки
2. Есть ли способ изменить видимость только с помощью командного свойства (которое в любом случае, вероятно, будет более правильным)

Спасибо !!

Ответы [ 2 ]

3 голосов
/ 21 июля 2010

Вам необходимо добавить логику в вашу команду для делегата CanExecute, например ::10000

ICommand comand = new DelegateCommand<object>
    (
    executeMethod: delegate { DoSomething(); }
    ,
    canExecuteMethod: delegate { return _buttonEnabled; }
    );

_buttonEnabled = false;

CommandManager.InvalidateRequerySuggested();

_buttonEnabled = true;

CommandManager.InvalidateRequerySuggested();

Переменная "_buttonEnabled" должна действительно представлять состояние вашего приложения, которое определяет, должна ли кнопка быть на самом деле включена или отключена. Например, это может быть «_isSomethingDone» и быть true \ false в зависимости от состояния вашего приложения. Это затем отключит вашу кнопку, пока «DoSomething» действительно что-то делает.

Грубый пример:

ICommand saveCommand = new DelegateCommand<object>
    (
    executeMethod: delegate { Save(); }
    ,
    canExecuteMethod: delegate { return _canSave; }
    );

private void Save()
{
    _canSave = false;

    CommandManager.InvalidateRequerySuggested();

    //do save...

    _canSave = true;

    CommandManager.InvalidateRequerySuggested();
}
1 голос
/ 21 июля 2010

Вам необходимо использовать событие CanExecute объекта команды и переместить свою логику в сам объект команды.Это будет проверено, чтобы сказать, если ваша кнопка включена.Вы можете прочитать msdn документацию ICommand , чтобы узнать больше об этой функции.Обязательно вызывайте CanExecuteChanged () всякий раз, когда происходит что-то, что вызывает изменение статуса.

Как только кнопка использует команду, она привязана к этому.Вы можете скрыть кнопку, изменив ее видимость, если вы предпочитаете это делать.

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