Язык программирования C#9 и платформа .NET5
dotnet add WpfControlsAndAPIs package Microsoft.EntityFrameworkCoredotnet add WpfControlsAndAPIs package Microsoft.EntityFrameworkCore.SqlServerdotnet add WpfControlsAndAPIs package Microsoft.Extensions.Configurationdotnet add WpfControlsAndAPIs package Microsoft.Extensions.Configuration.JsonЗатем щелкните правой кнопкой мыши на имени решения, выберите в контекстном меню пункт Add►Existing Project (Добавить►Существующий проект) и добавьте проекты
иAutoLot.Dalиз главы 23, а также ссылки на эти проекты. Сделать это можно также с помощью интерфейса командной строки, выполнив показанные ниже команды (вам придется скорректировать пути к проектам согласно требованиям имеющейся операционной системы):AutoLot.Dal.Modelsdotnet sln .\Chapter25_AllProjects.sln add ..\Chapter_23\AutoLot.Modelsdotnet sln .\Chapter25_AllProjects.sln add ..\Chapter_23\AutoLot.Daldotnet add WpfControlsAndAPIs reference ..\Chapter_23\AutoLot.Modelsdotnet add WpfControlsAndAPIs reference ..\Chapter_23\AutoLot.DalУбедитесь, что в проекте
все еще присутствует ссылка на проектAutoLot.Dal. Добавьте в файлAutoLot.Dal.Modelsследующие пространства имен:MainWindow.xaml.csusing System.Linq;using AutoLot.Dal.EfStructures;using AutoLot.Dal.Repos;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Configuration;Добавьте в
два свойства уровня модуля для хранения экземпляров реализацииMainWindow.csи классаIConfiguration:ApplicationDbContextprivate IConfiguration _configuration;private ApplicationDbContext _context;Добавьте новый метод по имени
для хранения экземпляров реализацииGetConfigurationAndContext()и классаIConfigurationи вызовите его в конструкторе. Вот полный код метода:ApplicationDbContextprivate void GetConfigurationAndDbContext(){_configuration = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", true, true).Build();var optionsBuilder =new DbContextOptionsBuilder<ApplicationDbContext>();var connectionString =_configuration.GetConnectionString("AutoLot");optionsBuilder.UseSqlServer(connectionString,sqlOptions => sqlOptions.EnableRetryOnFailure());_context = new ApplicationDbContext(optionsBuilder.Options);}Добавьте в проект новый файл JSON по имени
. Щелкните правой кнопкой мыши на имени этого файла в окне Solution Explorer, выберите в контекстном меню пункт Properties (Свойства) и установите свойство Copy То Output Directory (Копировать в выходной каталог) в Copy always (Всегда копировать). Вы можете добиться того же самого результата с помощью файла проекта:appsettings.json<ItemGroup><None Update="appsettings.json"><CopyToOutputDirectory>Always</CopyToOutputDirectory></None></ItemGroup>Модифицируйте файл JSON, как показано ниже (приведя строку подключения в соответствие со своей средой):
{"ConnectionStrings": {"AutoLotFinal": "server=.,5433;Database=AutoLot;User Id=sa;Password=P@ssw0rd;"}}Откройте файл
, добавьте последнюю вспомогательную функцию по имениMainWindow.xaml.csи вызовите ее в конструкторе после конфигурированияConfigureGrid(). Понадобится добавить лишь несколько строк кода:ApplicationDbContextprivate void ConfigureGrid(){using var repo = new CarRepo(_context);gridInventory.ItemsSource = repo.GetAllIgnoreQueryFilters().ToList().Select(x=> new {x.Id,Make=x.MakeName,x.Color,x.PetName});}Запустив проект, вы увидите данные, заполняющие сетку. При желании сделать сетку более привлекательной можно применить окно Properties в Visual Studio для редактирования свойств сетки, чтобы улучшить ее внешний вид.
На этом текущий пример завершен. В последующих главах вы увидите в действии другие элементы управления, но к настоящему моменту вы должны чувствовать себя увереннее с процессом построения пользовательских интерфейсов в Visual Studio, а также при работе с разметкой XAML и кодом С#.
Роль свойств зависимости
Подобно любому API-интерфейсу .NET Core внутри WPF используется каждый член системы типов .NET Core (классы, структуры, интерфейсы, делегаты, перечисления) и каждый член типа (свойства, методы, события, константные данные, поля только для чтения и т.д.). Однако в WPF также поддерживается уникальная программная концепция под названием свойство зависимости.