Чтобы применить построенный преобразователь в разметке, сначала нужно создать локальный ресурс, представляющий только что законченный класс. Не переживайте по поводу механики добавления ресурсов; тема будет детально раскрыта в нескольких последующих главах. Поместите показанную ниже разметку сразу после открывающего дескриптора 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(), код которого показан ниже:
<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")
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
<b> // Вызвать метод SetBindingO объекта Label.</b>
this.labelSBThumb.SetBinding(Label.ContentProperty, b);
}
}
}
}
Единственная часть метода SetBindings(), которая может выглядеть несколько необычной — вызов SetBinding(). Обратите внимание, что первый параметр обращается к статическому, доступному только для чтения полю ContentProperty класса Label. Как вы узнаете далее в главе, такая конструкция называется свойством зависимости. Пока просто имейте в виду, что при установке привязки в коде первый аргумент почти всегда требует указания имени класса, нуждающегося в привязке (Label в рассматриваемом случае), за которым следует обращение к внутреннему свойству с добавлением к его имени суффикса Property. Запустив приложение, можно удостовериться в том, что элемент Label отображает только целые числа.
Построение вкладки DataGrid
В предыдущем примере привязки данных иллюстрировался способ конфигурирования двух (или большего количества) элементов управления для участия в операции привязки данных. Наряду с тем, что это удобно, возможно также привязывать данные из файлов XML, базы данных и объектов в памяти. Чтобы завершить текущий пример, вы должны спроектировать финальную вкладку элемента управления DataGrid, которая будет отображать информацию, извлеченную из таблицы Inventory базы данных AutoLot.
Как и с другими вкладками, начните с замены текущего элемента Grid панелью StackPanel, напрямую обновив разметку XAML в Visual Studio. Внутри нового элемента 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, тогда введите приведенные далее команды (в каталоге решения):