Читаем Язык программирования C#9 и платформа .NET5 полностью

    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";

}

<p id="AutBody_Root1289"><strong>Присоединение команды к CommandManager</strong></p>

Финальное обновление класса команды связано с присоединением команды к диспетчеру команд (CommandManager). Метод CanExecute запускается при загрузке окна в первый раз и затем в ситуации, когда диспетчер команд инструктирует его о необходимости перезапуска. Каждый класс команды должен быть присоединен к диспетчеру команд, для чего нужно модифицировать код, относящийся к событию CanExecuteChanged:

public event EventHandler CanExecuteChanged

{

  add => CommandManager.RequerySuggested += value;

  remove => CommandManager.RequerySuggested -= value;

}

<p id="AutBody_Root1290"><strong>Изменение файла MainWindow.xaml.cs</strong></p>

Следующее изменение связано с созданием экземпляра класса ChangeColorCommand, к которому может иметь доступ элемент управления Button. В настоящий момент вы будете делать это в файле отделенного кода для MainWindow (позже в главе код переместится в модель представления). Откройте файл MainWindow.xaml.cs и удалите обработчик события Click для кнопки Change Color. Поместите в начало файла следующие операторы using (пространство имен может варьироваться в зависимости от того, работаете вы с предыдущим проектом или начали новый):

using WpfCommands.Cmds;

using System.Windows.Input;

Добавьте открытое свойство по имени ChangeColorCmd типа ICommand с поддерживающим полем. В теле выражения для свойства возвратите значение поддерживающего поля (создавая экземпляр ChangeColorCommand, если поддерживающее поле равно null):

private ICommand _changeColorCommand = null;

public ICommand ChangeColorCmd

  => _changeColorCommand ??= new ChangeColorCommand);

<p id="AutBody_Root1291"><strong>Изменение файла MainWindow.xaml</strong></p>

Как было показано в главе 25, элементы управления WPF, реагирующие на щелчки (вроде Button), имеют свойство Command, которое позволяет назначать элементу управления объект команды. Для начала присоедините объект команды, созданный в файле отделенного кода, к кнопке btnChangeColor. Поскольку свойство для команды находится в классе MainWindow, с помощью синтаксиса привязки RelativeSource получается окно, содержащее необходимую кнопку:

Command="{Binding Path=ChangeColorCmd,

  RelativeSource={RelativeSource Mode=FindAncestor,

    AncestorType={x:Type Window}}}"

Кнопка также нуждается в передаче объекта Car в качестве параметра для методов CanExecute и Execute, что делается через свойство CommandParameter. Установите свойство Path для CommandParameter в свойство SelectedItem элемента ComboBox по имени cboCars:

CommandParameter="{Binding ElementName=cboCars, Path=SelectedItem}"

Вот завершенная разметка для кнопки:

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT