Язык программирования C#9 и платформа .NET5
Чтобы применить построенный преобразователь в разметке, сначала нужно создать локальный ресурс, представляющий только что законченный класс. Не переживайте по поводу механики добавления ресурсов; тема будет детально раскрыта в нескольких последующих главах. Поместите показанную ниже разметку сразу после открывающего дескриптора
: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={StaticResourceDoubleConverter}}" />Теперь после запуска приложения вы будете видеть только целые числа.
Установление привязок данных в коде
Специальный преобразователь данных можно также регистрировать в коде. Начните с очистки текущего определения элемента управления
внутри вкладкиLabel, чтобы расширение разметкиData Bindingбольше не использовалось:{Binding}<Label x:Name="labelSBThumb" Height="30" BorderBrush="Blue"BorderThickness="2" />Добавьте оператор
дляusingи в конструкторе окна вызовите новый закрытый вспомогательный метод по имениSystem.Windows.Data, код которого показан ниже:SetBindings()<b>using System.Windows.Data;</b>...namespace WpfControlsAndAPIs{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();...SetBindings();}...private void SetBindings(){<b> // Создать объект Binding.</b>Binding b = new Binding{<b> // Зарегистрировать преобразователь, источник и путь.</b>Converter = new MyDoubleConverter(),Source = this.mySB,Path = new PropertyPath("Value")<b> // Вызвать метод SetBindingO объекта Label.</b>this.labelSBThumb.SetBinding(Label.ContentProperty, b);}}}}Единственная часть метода
, которая может выглядеть несколько необычной — вызовSetBindings(). Обратите внимание, что первый параметр обращается к статическому, доступному только для чтения полюSetBinding()классаContentProperty. Как вы узнаете далее в главе, такая конструкция называется свойством зависимости. Пока просто имейте в виду, что при установке привязки в коде первый аргумент почти всегда требует указания имени класса, нуждающегося в привязке (Labelв рассматриваемом случае), за которым следует обращение к внутреннему свойству с добавлением к его имени суффиксаLabel. Запустив приложение, можно удостовериться в том, что элементPropertyотображает только целые числа.LabelПостроение вкладки DataGrid
В предыдущем примере привязки данных иллюстрировался способ конфигурирования двух (или большего количества) элементов управления для участия в операции привязки данных. Наряду с тем, что это удобно, возможно также привязывать данные из файлов XML, базы данных и объектов в памяти. Чтобы завершить текущий пример, вы должны спроектировать финальную вкладку элемента управления
, которая будет отображать информацию, извлеченную из таблицыDataGridбазы данныхInventory.AutoLotКак и с другими вкладками, начните с замены текущего элемента
панельюGrid, напрямую обновив разметку XAML в Visual Studio. Внутри нового элементаStackPanelопределите элемент управленияStackPanelпо имениDataGrid:gridInventory<TabItem x:Name="tabDataGrid" Header="DataGrid"><StackPanel><DataGrid x:Name="gridInventory" Height="288"/></StackPanel></TabItem>С помощью диспетчера пакетов NuGet добавьте в проект следующие пакеты:
•
Microsoft.EntityFrameworkCore•
Microsoft.EntityFrameworkCore.SqlServer•
Microsoft.Extensions.Configuration•
Microsoft.Extensions.Configuration.JsonЕсли вы предпочитаете добавлять пакеты в интерфейсе командной строки .NET Core, тогда введите приведенные далее команды (в каталоге решения):