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

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

private readonly IList<Car> _cars =

  new ObservableCollection<Car>();

Снова запустите приложение и щелкните на кнопке Add Car. Новые записи будут должным образом появляться.

Реализация флага изменения

Еще одним преимуществом наблюдаемых моделей является способность отслеживать изменения состояния. Отслеживать флаги изменения (т.е. когда изменяется одно и более значений объекта) в WPF довольно легко. Добавьте в класс

Car
свойство типа
bool
по имени
IsChanged
. Внутри его блока
set
вызовите метод
OnPropertyChanged()
, как поступали с другими свойствами класса
Car
.

private bool _isChanged;

public bool IsChanged {

  get => _isChanged;

  set

  {

    if (value == _isChanged) return;

    _isChanged = value;

    OnPropertyChanged();

  }

}

Свойство

IsChanged
необходимо устанавливать в
true
внутри метода
OnPropertyChanged()
. Важно не устанавливать свойство
IsChanged
в
true
в случае изменения его самого, иначе сгенерируется исключение переполнения стека! Модифицируйте метод
OnPropertyChanged()
следующим образом (здесь используется описанная ранее операция
nameof
):

protected virtual void OnPropertyChanged(

  [CallerMemberName] string propertyName = "")

{

  if (propertyName != nameof(IsChanged))

  {

    IsChanged = true;

  }

  PropertyChanged?.Invoke(this,

    new PropertyChangedEventArgs(propertyName));

}

Откройте файл

MainWindow.xaml
и добавьте в
DetailsGrid
дополнительный элемент
RowDefinition
. Поместите в конец элемента
Grid
показанную ниже разметку, которая содержит элементы управления
Label
и
Checkbox
, привязанные к свойству
IsChanged
:

<Label Grid.Column="0" Grid.Row="5" Content="Is Changed"/>

<CheckBox Grid.Column="1" Grid.Row="5" VerticalAlignment="Center"

    Margin="10,0,0,0" IsEnabled="False" IsChecked="{Binding Path=IsChanged}" />

Если вы запустите приложение прямо сейчас, то увидите, что каждая отдельная запись отображается как измененная, хотя пока ничего не изменялось! Дело в том, что во время создания объекта устанавливаются значения свойств, а установка любых значений приводит к вызову метода

OnPropertyChanged()
, который и устанавливает свойство
IsChanged
объекта. Чтобы устранить проблему, установите свойство
IsChanged
в
false
последним в коде инициализации объекта. Откройте файл
MainWindow.xaml.cs
и модифицируйте код создания списка:

_cars.Add(

     new Car {Id = 1, Color = "Blue", Make = "Chevy",

              PetName = &quot;Kit&quot;, <b>IsChanged = false</b>});

_cars.Add(

     new Car {Id = 2, Color = &quot;Red&quot;, Make = &quot;Ford&quot;,

              PetName = &quot;Red Rider&quot;, <b>IsChanged = </b>
<b>false</b>});

Снова запустите приложение, выберите автомобиль и щелкните на кнопке Change Color. Флажок Is Changed (Изменено) становится отмеченным наряду с изменением цвета.

Обновление источника через взаимодействие с пользовательским интерфейсом

Во время выполнения приложения можно заметить, что при вводе в текстовых полях флажок Is Changed не становится отмеченным до тех пор, пока фокус не покинет элемент управления, где производился ввод. Причина кроется в свойстве

UpdateSourceTrigger
привязок элементов
TextBox
.

Свойство

UpdateSourceTrigger
определяет, какое событие (изменение значения, переход фокуса и т.д.) является основанием для обновления пользовательским интерфейсом лежащих в основе данных. Перечисление
UpdateSourceTrigger
принимает значения, описанные в табл. 28.1.

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

Стандартным событием обновления для элементов управления

TextBox
является
LostFocus
. Измените его на
PropertyChanged
, модифицировав привязку для элемента
TextBox
, который отвечает за ввод цвета:

&lt;TextBox Grid.Column=&quot;1&quot; Grid.Row=&quot;2&quot; Text=&quot;{Binding Path=Color, 

UpdateSourceTrigger=PropertyChanged}&quot; /&gt;

Если вы запустите приложение и начнете ввод в текстовом поле Color (Цвет), то флажок Is Changed немедленно отметится. Может возникнуть вопрос о том, почему для элементов управления

TextBox
в качестве стандартного выбрано значение
LostFocus
. Дело в том, что проверка достоверности (рассматриваемая вскоре) для модели запускается в сочетании с
UpdateSourceTrigger
. В случае
TextBox
это может потенциально вызывать ошибки, которые будут постоянно возникать до тех пор, пока пользователь не введет корректное значение. Например, если правила проверки достоверности не разрешают вводить в элементе
TextBox
менее пяти символов, тогда сообщение об ошибке будет отображаться при каждом нажатии клавиши, пока пользователь не введет пять или более символов. В таких случаях с обновлением источника лучше подождать до момента, когда пользователь переместит фокус из элемента
TextBox
(завершив изменение текста).

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

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

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


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

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


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

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

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


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