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

                       PetName = "Kit"});

    _cars.Add(new Car {Id = 2, Color = "Red", Make = "Ford",

                       PetName = "Red Rider"});

    cboCars.ItemsSource = _cars;

    }

}

Запустите приложение. Вы увидите, что в поле со списком Vehicle для выбора доступны два варианта автомобилей. Выбор одного из них приводит к автоматическому заполнению текстовых полей сведениями об автомобиле. Измените цвет одного из автомобилей, выберите другой автомобиль и затем возвратитесь к автомобилю, запись о котором редактировалась. Вы обнаружите, что новый цвет по-прежнему связан с автомобилем. Здесь нет ничего примечательного, просто демонстрируется мощь привязки данных XAML.

<p id="AutBody_Root1261"><strong>Изменение данных об автомобиле в коде</strong></p>

Несмотря на то что предыдущий пример работает ожидаемым образом, когда данные изменяются программно, пользовательский интерфейс не отразит изменения до тех пор, пока в приложении не будет предусмотрен код для обновления данных. Чтобы проиллюстрировать сказанное, добавьте обработчик события Click для кнопки btnChangeColor:

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

    Padding="4, 2" Click="BtnChangeColor_OnClick"/>

Внутри обработчика события BtnChangeColor_OnClick() с помощью свойства SelectedItem элемента управления ComboBox отыщите выбранную запись в списке автомобилей и измените ее цвет на Pink:

private void BtnChangeColor_OnClick(object sender, RoutedEventArgs e)

{

  _cars.First(x => x.Id == ((Car)cboCars.SelectedItem)?.Id).Color = "Pink";

}

Запустите приложение, выберите автомобиль и щелкните на кнопке Change Color (Изменить цвет). Никаких видимых изменений не произойдет. Выберите другой автомобиль и затем снова первоначальный. Теперь вы заметите обновленное значение. Для пользователя такое поведение не особенно подходит.

Добавьте обработчик события Click для кнопки btnAddCar:

  Click="BtnAddCar_OnClick" />

В обработчике события BtnAddCar_OnClick() добавьте новую запись в список Car:

private void BtnAddCar_Click(object sender, RoutedEventArgs e)

{

  var maxCount = _cars?.Max(x => x.Id) ?? 0;

  _cars?.Add(new Car { Id=++maxCount,Color="Yellow",Make="VW",PetName="Birdie"});

}

Запустите приложение, щелкните на кнопке Add Car (Добавить автомобиль) и просмотрите содержимое элемента управления ComboBox. Хотя известно, что в списке имеется три автомобиля, в элементе ComboBox отображаются только два! Чтобы устранить обе проблемы, вы превратите класс Car в наблюдаемую модель и будете использовать наблюдаемую коллекцию для хранения всех экземпляров Car.

<p id="AutBody_Root1262"><strong>Наблюдаемые модели</strong></p>

Проблема с тем, что изменение значения свойства модели не отображается в пользовательском интерфейсе, решается за счет реализации классом модели Car интерфейса INotifyPropertyChanged. Интерфейс INotifyPropertyChanged содержит единственное событие PropertyChangedEvent. Механизм привязки XAML прослушивает это событие для каждого привязанного свойства в классах, реализующих интерфейс INotifyPropertyChanged. Вот как определен интерфейс INotifyPropertyChanged:

public interface INotifyPropertyChanged

{

  event PropertyChangedEventHandler PropertyChanged;

}

Добавьте в файл Car.cs следующие операторы using:

using System.ComponentModel;

using System.Runtime.CompilerServices;

Затем обеспечьте реализацию классом Car интерфейса INotifyPropertyChanged:

public class Car : INotifyPropertyChanged

{

  // Для краткости код не показан.

  public event PropertyChangedEventHandler PropertyChanged;

}

Событие PropertyChanged принимает объектную ссылку и новый экземпляр класса PropertyChangedEventArgs:

PropertyChanged?.Invoke(this,

  new PropertyChangedEventArgs("Model"));

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных