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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

177 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 327 328 329 330 331 332 333 334 335 ... 407
    Перейти на страницу:
    почему он имеет настолько большой размер):

    <Button Content="Click" Height="200"/>

    Чтобы сгенерировать привязки данных для множества элементов управления, вы могли бы применить Visual Studio, но взамен введите модифицированную разметку в редакторе XAML:

    <!-- Обратите внимание, что StackPanel устанавливает

         свойство DataContext -->

    <StackPanel Background="#FFE5E5E5"

                DataContext = "{Binding ElementName=mySB}">

      ...

      <!-- Теперь оба элемента пользовательского интерфейса работают

           со значением линейки прокрутки уникальными путями -->

      <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"

          BorderThickness="2"

          Content = "{Binding Path=Value}"/>

      <Button Content="Click" Height="200" FontSize = "{Binding Path=Value}"/>

    </StackPanel>

    Здесь свойство DataContext панели StackPanel устанавливается напрямую. Таким образом, при перемещении ползунка не только отображается текущее значение в элементе Label, но и в соответствии с этим текущим значением увеличивается размер шрифта элемента Button (на рис. 25.22 показан возможный вывод).

    Форматирование привязанных данных

    Вместо ожидаемого целого числа для представления положения ползунка тип ScrollBar использует значение double. Следовательно, по мере перемещения ползунка внутри элемента Label будут отображаться разнообразные значения с плавающей точкой (вроде 61.0576923076923), которые выглядят не слишком интуитивно понятными для конечного пользователя, почти наверняка ожидающего увидеть целые числа (такие как 61, 62, 63 и т.д.).

    При желании форматировать данные можно добавить свойство ContentStringFormat с передачей ему специальной строки и спецификатора формата .NET Core:

    <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"

      BorderThickness="2" Content = "{Binding Path=Value}"

      ContentStringFormat="The value is: {0:F0}"/>

    Если в спецификаторе формата отсутствует какой-либо текст, тогда его понадобится предварить пустым набором фигурных скобок, который является управляющей последовательностью для XAML. Такой прием уведомляет процессор о том, что следующие за {} символы представляют собой литералы, а не, скажем, конструкцию привязки. Вот обновленная разметка XAML:

    <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"

      BorderThickness="2" Content = "{Binding Path=Value}"

      ContentStringFormat="{}{0:F0}"/>

    На заметку! При привязке свойства Text элемента управления пару "имя-значение" объекта StringFormat можно добавлять прямо в конструкции привязки. Она должна быть отдельной только для свойств Content.

    Преобразование данных с использованием интерфейса IValueConverter

    Если требуется нечто большее, чем просто форматирование данных, тогда можно создать специальный класс, реализующий интерфейс IValueCVonverter из пространства имен System.Windows.Data. В интерфейсе IValueCVonverter определены два члена, позволяющие выполнять преобразование между источником и целью (в случае двунаправленной привязки). После определения такой класс можно применять для дальнейшего уточнения процесса привязки данных.

    Вместо использования свойства форматирования можно применять преобразователь значений для отображения целых чисел внутри элемента управления Label. Добавьте в проект новый класс (по имени MyDoubleConverter) со следующим кодом:

    using System;

    using System.Windows.Data;

    namespace WpfControlsAndAPIs

    {

      public class MyDoubleConverter : IValueConverter

      {

         public object Convert(object value, Type targetType, object parameter,

    System.Globalization.CultureInfo culture)

        {

          // Преобразовать значение double в int.

          double v = (double)value;

          return (int)v;

        }

        public object ConvertBack(object value, Type targetType, object parameter,

                                  System.Globalization.CultureInfo culture)

        {

          // Поскольку заботиться здесь о "двунаправленной" привязке

          // не нужно, просто возвратить значение value.

          return value;

        }

      }

    }

    Метод Convert() вызывается при передаче значения от источника (ScrollBar) к цели (свойство Content элемента Label). Хотя он принимает много входных аргументов, для такого преобразования понадобится манипулировать только входным аргументом типа object, который представляет текущее значение double. Данный тип можно использовать для приведения к целому и возврата нового числа.

    Метод ConvertBack() будет вызываться, когда значение передается от цели к источнику (если включен двунаправленный режим привязки). Здесь мы просто возвращаем значение value. Это позволяет вводить в TextBox значение с плавающей точкой (например, 99.9) и автоматически преобразовывать его в целочисленное значение (99), когда пользователь перемещает фокус из элемента управления. Такое "бесплатное" преобразование происходит из-за того, что метод Convert() будет вызываться еще раз после вызова ConvertBack(). Если просто возвратить null из ConvertBack(), то синхронизация привязки будет выглядеть нарушенной, т.к. элемент TextBox по-прежнему будет отображать число с плавающей точкой.

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

    <Window.Resources>

      <local:MyDoubleConverter x:Key="DoubleConverter"/>

    </Window.Resources>

    Далее обновите конструкцию привязки для элемента управления Label:

    <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"

      BorderThickness="2"

      Content = "{Binding Path=Value,

      Converter={StaticResource DoubleConverter}}" />

    Теперь после запуска приложения вы будете видеть только целые числа.

    Установление привязок данных в коде

    Специальный преобразователь данных можно также регистрировать в коде. Начните с очистки текущего определения элемента управления Label внутри вкладки Data Binding, чтобы расширение разметки {Binding} больше не использовалось:

    <Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"

        BorderThickness="2" />

    Добавьте оператор using для System.Windows.Data и в конструкторе окна вызовите новый закрытый вспомогательный метод по имени SetBindings(), код которого показан ниже:

    using System.Windows.Data;

    ...

    namespace WpfControlsAndAPIs

    {

      public partial class MainWindow : Window

      {

        public MainWindow()

        {

          InitializeComponent();

        ...

          SetBindings();

        }

        ...

        private void SetBindings()

        {

          // Создать объект Binding.

          Binding b = new Binding

          {

            // Зарегистрировать преобразователь, источник и путь.

            Converter = new MyDoubleConverter(),

            Source = this.mySB,

            Path = new PropertyPath("Value")

            // Вызвать метод SetBindingO объекта Label.

            this.labelSBThumb.SetBinding(Label.ContentProperty, b);

          }

        }

      }

    }

    Единственная часть метода SetBindings(), которая может выглядеть несколько необычной — вызов SetBinding(). Обратите

    1 ... 327 328 329 330 331 332 333 334 335 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

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

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


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Лариса Лариса04 июнь 12:43 Да, просто до слез похоже на сериал ,,Даррел,,... Смерть в райском уголке - Эмили Салливан
    2. Stmara Stmara02 июнь 22:44 Приятная история, чтобы скоротать вечер. Любимая книга из последних "Любовь со смертью", также очень понравилась -"Суженная... Сердце космического дракона - Ольга Вадимовна Гусейнова
    3. Alex Alex01 июнь 17:12 💩💩💩🖕🖕🖕🖕🖕🖕🖕... Игровой момент II - Александр Андреевич Бодров
    Все комметарии
    Новинки бесплатной онлайн библиотеки