App.xaml Здесь подключается глобальная тема Material Design, которая задаёт стиль всему приложению: цвета, кнопки, поля ввода и элементы интерфейса. BundledTheme задаёт цветовую схему, а ResourceDictionary подключает стандартные стили WPF-компонентов. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" StartupUri="MainWindow.xaml"> MainWindow.xaml.cs Этот код реализует обработчик кнопки загрузки файла. Пользователь выбирает текстовый файл, данные считываются через DataTier, затем передаются в LogicTier для расчёта максимальной цены за/квадратный метр и средней цены квартир. Результаты выводятся в интерфейс WPF. // Подключение базовых системных библиотек (.NET) using System; // Подключение WPF (окна, элементы управления) using System.Windows; // Подключение стандартного диалога открытия файла using Microsoft.Win32; // Подключение слоя данных (DataTier) using DataTier; // Подключение слоя бизнес-логики (LogicTier) using LogicTier; namespace PresentationTier { // Класс главного окна приложения (WPF Window) public partial class MainWindow : Window { // Конструктор окна (вызывается при запуске приложения) public MainWindow() { // Инициализация всех компонентов интерфейса из XAML InitializeComponent(); } // Обработчик нажатия кнопки "Загрузить файл" private void Load_Click(object sender, RoutedEventArgs e) { // Оборачиваем код в try-catch для обработки ошибок try { // Создаём стандартное окно выбора файла var dialog = new OpenFileDialog(); // Показываем диалог пользователю // Если пользователь нажал "Отмена" — выходим из метода if (dialog.ShowDialog() != true) return; // Создаём объект репозитория (слой DataTier) // Он отвечает за чтение данных из файла var repo = new ФайлРепозиторий(); // Загружаем список объектов недвижимости из выбранного файла var data = repo.Загрузить(dialog.FileName); // Привязываем список к таблице DataGrid // Теперь данные отображаются в интерфейсе GridData.ItemsSource = data; // Создаём объект бизнес-логики (слой LogicTier) // Передаём ему загруженные данные var logic = new Аналитика(data); // Вычисляем объект с максимальной ценой за м² var max = logic.МаксимальнаяЦенаЗаМ2(); // Вычисляем среднюю цену за м² только для квартир var avg = logic.СредняяЦенаКвартир(); // Выводим результат максимального значения в интерфейс MaxText.Text = $"Максимальная цена за м²: {max.Тип} → {max.ЦенаЗаМ2:F2}"; // Выводим среднее значение для квартир AvgText.Text = $"Средняя цена квартир: {avg:F2}"; } catch (Exception ex) { // Если произошла ошибка — показываем сообщение пользователю MessageBox.Show( "Ошибка: " + ex.Message, // текст ошибки "Ошибка", // заголовок окна MessageBoxButton.OK, // кнопка OK MessageBoxImage.Error // иконка ошибки ); } } } } MainWindow.xaml Это главное окно приложения WPF. Оно состоит из трёх частей: кнопка загрузки файла, таблица для отображения данных и блок вывода результатов. Данные загружаются из файла, отображаются в DataGrid, а затем через бизнес-логику вычисляются аналитические показатели. // Главное окно WPF приложения