Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 567 568 569 570 571 572 573 574 575 ... 642
Перейти на страницу:

    Padding=&quot;4, 2&quot; Command=&quot;{Binding Path=ChangeColorCmd,

    RelativeSource={RelativeSource Mode=FindAncestor,

                    AncestorType={x:Type Window}}}&quot;

    CommandParameter=&quot;{Binding ElementName=cboCars, Path=SelectedItem}&quot;/&gt;

Тестирование приложения

Запустите приложение. Кнопка Change Color не будет доступной (рис. 28.8), т.к. автомобиль еще не выбран.

Теперь выберите автомобиль; кнопка Change Color становится доступной, а щелчок на ней обеспечивает изменение цвета, как и ожидалось!

Создание класса CommandBase

Если распространить такой шаблон на AddCarCommand.cs, то итогом стал бы код, повторяющийся среди классов. Это хороший знак о том, что необходим базовый класс. Создайте внутри папки Cmds новый файл класса по имени CommandBase.cs и добавьте оператор using для пространства имен System.Windows.Input. Сделайте класс CommandBase открытым и реализующим интерфейс ICommand. Превратите класс и методы Execute() и CanExecute() в абстрактные. Наконец, добавьте обновление в событие CanExecuteChanged из класса ChangeColorCommand. Ниже показана полная реализация:

using System;

using System.Windows.Input;

namespace WpfCommands.Cmds

{

  public abstract class CommandBase : ICommand

  {

    public abstract bool CanExecute(object parameter);

    public abstract void Execute(object parameter);

    public event EventHandler CanExecuteChanged

    {

      add =&gt; CommandManager.RequerySuggested += value;

      remove =&gt; CommandManager.RequerySuggested -= value;

    }

  }

}

Добавление класса AddCarCommand

Добавьте в папку Cmds новый файл класса по имени AddCarCommand.cs. Сделайте класс открытым и укажите CommandBase в качестве базового класса. Поместите в начало файла следующие операторы using:

using System.Collections.ObjectModel;

using System.Linq;

using WpfCommands.Models;

Ожидается, что параметр должен иметь тип ObservableCollection&lt;Car&gt;, поэтому предусмотрите в методе CanExecute() соответствующую проверку. Если параметр относится к типу ObservableCollection&lt;Car&gt;, тогда метод Execute() должен добавить дополнительный объект Car подобно обработчику события Click.

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

public class AddCarCommand :CommandBase

{

  public override bool CanExecute(object parameter)

    =&gt; parameter is ObservableCollection&lt;Car&gt;;

  public override void Execute(object parameter)

  {

    if (parameter is not ObservableCollection&lt;Car&gt; cars)

    {

      return;

    }

    var maxCount = cars.Max(x =&gt; x.Id);

    cars.Add(new Car

    {

      Id = ++maxCount,

      Color = &quot;Yellow&quot;,

      Make = &quot;VW&quot;,

      PetName = &quot;Birdie&quot;

    });

  }

}

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

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

private ICommand _addCarCommand = null;

public ICommand AddCarCmd

  =&gt; _addCarCommand ??= new AddCarCommand());

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

Модифицируйте разметку XAML, удалив атрибут Click и добавив атрибуты Command и CommandParameter. Объект AddCarCommand будет получать список автомобилей из поля со списком cboCars. Ниже показана полная разметка XAML для кнопки:

&lt;Button x:Name=&quot;btnAddCar&quot; Content=&quot;Add Car&quot; Margin=&quot;5,0,5,0&quot; Padding=&quot;4, 2&quot;

  Command=&quot;{Binding Path=AddCarCmd,

  RelativeSource={RelativeSource Mode=FindAncestor,

  AncestorType={x:Type Window}}}&quot;

  CommandParameter=&quot;{Binding ElementName=cboCars, Path=ItemsSource}&quot;/&gt;

1 ... 567 568 569 570 571 572 573 574 575 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга