Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
1 ... 566 567 568 569 570 571 572 573 574 ... 642
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

  }

  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() запускается при загрузке окна в первый раз и затем в ситуации, когда диспетчер команд инструктирует его о необходимости перезапуска. Каждый класс команды должен быть присоединен к диспетчеру команд, для чего нужно модифицировать код, относящийся к событию CanExecuteChanged:

public event EventHandler CanExecuteChanged

{

  add => CommandManager.RequerySuggested += value;

  remove => CommandManager.RequerySuggested -= value;

}

Изменение файла MainWindow.xaml.cs

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

Следующее изменение связано с созданием экземпляра класса 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());

Изменение файла MainWindow.xaml

Как было показано в главе 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}"

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

<Button x:Name="btnChangeColor" Content="Change Color" Margin="5,0,5,0"

1 ... 566 567 568 569 570 571 572 573 574 ... 642
Перейти на страницу:
Отывы о книге
Открыть боковую панель
Комментарии
Ксения
Ксения 25.01.2025 - 12:30
Неплохая подборка книг. Прочитаю все однозначно.
Jonna
Jonna 02.01.2025 - 01:03
Страстно🔥 очень страстно
Ксения
Ксения 20.12.2024 - 00:16
Через чур правильный герой. Поэтому и остался один
Настя
Настя 08.12.2024 - 03:18
Прочла с удовольствием. Необычный сюжет с замечательной концовкой
Марина
Марина 08.12.2024 - 02:13
Не могу понять, где продолжение... Очень интересная история, хочется прочесть далее