Вопрос
Могу ли я использовать 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; }
}
Я не знаю, каковы последствия для производительности для этого; Тем не менее, они, кажется, не слишком велики, в любом случае. Это то, что я использую.