вы замените командами, начав с кнопки Change Color. Создайте в проекте новую папку по имени
Cmds
. Добавьте в нее новый файл класса
ChangeColorCornmand.cs
. Сделайте класс открытым и реализующим интерфейс
ICommand
. Добавьте приведенные ниже операторы
using
(первый может варьироваться в зависимости от того, создавался ли новый проект для данного примера):
using WpfCommands.Models;
using System.Windows.Input;
Код класса должен выглядеть примерно так:
public class ChangeColorCommand : ICommand
{
public bool CanExecute(object parameter)
{
throw new NotImplementedException;
}
public void Execute(object parameter)
{
throw new NotImplementedException;
}
public event EventHandler CanExecuteChanged;
}
Если метод
CanExecute
возвращает
true
, то привязанные элементы управления будут включенными, а если
false
, тогда они будут отключенными. Если элемент управления включен (
CanExecute
возвращает
true
)и на нем совершается щелчок, то запустится метод
Execute
. Параметры, передаваемые обоим методам, поступают из пользовательского интерфейса и основаны на свойстве
CommandParameter
, устанавливаемом в конструкциях привязки. Событие
CanExecuteChanged
предусмотрено в системе привязки и уведомлений для информирования пользовательского интерфейса о том, что результат, возвращаемый методом
CanExecute
, изменился (почти как событие
PropertyChanged
).
В текущем примере кнопка Change Color должна работать, только если параметр отличается от
null
ипринадлежит типу
Car
. Модифицируйте метод
CanExecute
следующим образом:
public bool CanExecute(object parameter)
=> (parameter as Car) != null;
Значение параметра для метода
Execute
будет таким же, как и для метода
CanExecute
. Поскольку метод
Execute
может выполняться лишь в случае, если
object
имеет тип
Car
, аргумент потребуется привести к типу
Car
и затем обновить значение цвета:
public void Execute(object parameter)
{
((Car)parameter).Color="Pink";
}
Присоединение команды
к CommandManager
Финальное обновление класса команды связано с присоединением команды к диспетчеру команд (
CommandManager
). Метод
CanExecute
запускается при загрузке окна в первый раз и затем в ситуации, когда диспетчер команд инструктирует его о необходимости перезапуска. Каждый класс команды должен быть присоединен к диспетчеру команд, для чего нужно модифицировать код, относящийся к событию