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

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

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

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

Первый параметр представляет собой объект, который инициирует событие. Конструктор класса PropertyChangedEventArgs принимает строку, указывающую свойство, которое было изменено и нуждается в обновлении. Когда событие инициировано, механизм привязки ищет элементы управления, привязанные к именованному свойству данного объекта. В случае передачи конструктору PropertyChangedEventArgs значения String.Empty обновляются все привязанные свойства объекта.

Вы сами управляете тем, какие свойства вовлечены в процесс автоматического обновления. Автоматически обновляться будут только те свойства, которые генерируют событие PropertyChanged внутри блока set. Обычно в перечень входят все свойства классов моделей, но в зависимости от требований приложения некоторые свойства можно опускать. Вместо инициирования события PropertyChanged непосредственно в блоке set для каждого задействованного свойства распространенный подход предусматривает написание вспомогательного метода (как правило, называемого OnPropertyChanged()), который генерирует событие от имени свойств обычно в базовом классе для моделей. Добавьте в класс Car следующий метод:

protected void OnPropertyChanged([CallerMemberName] string propertyName = "")

{

  PropertyChanged?.Invoke(this,

    new PropertyChangedEventArgs(propertyName));

}

Модифицируйте каждое автоматическое свойство класса Car, чтобы оно имело полноценные блоки get и set, а также поддерживающее поле. В случае если значение изменилось, вызовите вспомогательный метод OnPropertyChanged(). Вот обновленное свойство Id:

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

private int _id;

public int Id

{

  get => _id;

  set

  {

    if (value == _id) return;

    _id = value;

    OnPropertyChanged();

  }

}

Проделайте аналогичную работу со всеми остальными свойствами в классе и снова запустите приложение. Выберите автомобиль и щелкните на кнопке Change Color. Изменение немедленно отобразится в пользовательском интерфейсе. Первая проблема решена!

Использование операции nameof

 В версии C# 6 появилась операция nameof, которая возвращает строковое имя переданного ей элемента. Ее можно применять в вызовах метода OnPropertyChanged() внутри блоков set, например:

public string Color

{

  get { return _color; }

  set

  {

    if (value == _color) return;

    _color = value;

    OnPropertyChanged(nameof(Color));

  }

}

Обратите внимание на то, что в случае использования операции nameof удалять атрибут [CallerMemberName] из метода OnPropertyChanged() необязательно (хотя он становится излишним). В конце концов, выбор между применением операции nameof или атрибута CallerMemberName зависит от личных предпочтений.

Наблюдаемые коллекции

 Следующей проблемой, которую необходимо решить, является обновление пользовательского интерфейса при изменении содержимого коллекции, что достигается путем реализации интерфейса INotifyCollectionChanged. Подобно INotifyPropertyChanged данный интерфейс открывает доступ к единственному событию CollectionChanged. В отличие от INotifyPropertyChanged реализация интерфейса INotifyCollectionChanged вручную предполагает больший объем действий, чем просто вызов метода в блоке set свойства. Понадобится создать реализацию полного списка объектов и генерировать событие CollectionChanged каждый раз, когда он изменяется.

Использование класса ObservableCollection<T>

К счастью, существует намного более легкий способ, чем создание собственных классов коллекций. Класс ObservableCollection&lt;T&gt; реализует интерфейсы INotifyCollectionChanged, INotifyPropertyChanged и Collection&lt;T&gt; и входит в состав .NET Core. Никакой дополнительной работы делать не придется. Чтобы продемонстрировать его применение, добавьте оператор using для пространства имен System.Collections.ObjectModel и модифицируйте закрытое поле _cars следующим образом:

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


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

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


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*