Вопрос

Могу ли я использовать CanexeCuteChanged, чтобы изменить условие «может выполнить»?

Или еще ... "для чего" используется?

Это было полезно?

Решение

Нет, вы не можете использовать его, чтобы изменить состояние CAN выполнить. Это событие и объекты, которые участвуют в ICommand Паттерн может выбирать, чтобы прослушать это событие, например, кнопка может использовать это событие, чтобы узнать, когда для повторного зарегистрирования состояния команд (вызовая метод CAN выполнить), чтобы установить его включенное состояние.

Для того, чтобы мощный шаблон был полезным, нужно быть чем -то, что можно использовать для повышения события. Призма DelegateCommand Имеет метод, который вы можете позвонить, чтобы вручную поднять это событие, чтобы подписчики повторно зарегистрировали метод CAN, если они выбрали шаблон.

  • Назначьте команду кнопке.
  • Кнопка подписывается, чтобы выполнить измененное событие.
  • Кнопка «Выполнить» может выполнить метод и возвращает кнопку FALSE - DISTALS.
  • Вы изменяете состояние, которое может выполнять метод, зависит от.
  • Вы звоните по поднятию может выполнить изменение в команде Prism.
  • Может выполнить измененное событие.
  • Обработчики событий кнопок.
  • Команда кнопок может выполнить метод - кнопка включена.

Пример

В следующем примере, основанном на призме, мы меняем состояние SaveCommand CanExecute от false до true, пока команда сохранения выполняет. Призыв кRaiseCanExecuteChanged вызовет CanExecuteChanged мероприятие, которое будет поднято, и клиенты, чтобы вызвать CanExecute метод На практике это сделало бы кнопку сохранения, которая была связана SaveCommand Измените его состояние с включенного на отключение и обратно, чтобы снова включить.

public class BlingViewModel
{
    private DelegateCommand<object> _saveCommand;
    private bool _canSaveExecute = true;

    public ICommand SaveCommand
    {
        get
        {
            if (_saveCommand == null)
            {
                _saveCommand = new DelegateCommand<object>
                    (
                    executeMethod: _ => Save()
                    ,
                    canExecuteMethod: _ => _canSaveExecute
                    );
            }
            return _saveCommand;
        }
    }

    private void Save()
    {
        _canSaveExecute = false;
        _saveCommand.RaiseCanExecuteChanged();

        Console.WriteLine("Saving...");

        _canSaveExecute = true;
        _saveCommand.RaiseCanExecuteChanged();
    }
}

Другие советы

Или просто позвоните System.Windows.Input.CommandManager.InvalidateRequerySuggested() так что ваш CanExecute Хандлеры переоценены.

public override event EventHandler CanExecuteChanged
{    
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

Я не знаю, каковы последствия для производительности для этого; Тем не менее, они, кажется, не слишком велики, в любом случае. Это то, что я использую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top