using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Input; using Avalonia.LogicalTree; using AvaloniaApplication14_Inventory_300326.Models.DataBase; using AvaloniaApplication14_Inventory_300326.Models.Factoryes; using AvaloniaApplication14_Inventory_300326.Models.Models; using AvaloniaApplication14_Inventory_300326.Views; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; namespace AvaloniaApplication14_Inventory_300326.ViewModels; public partial class MainWindowViewModel : ViewModelBase { private MainWindow _currentWindow; private IServiceProvider _serviceProvider; [ObservableProperty] private ObservableCollection _entities; [ObservableProperty] private Entity _selectedEntity; [ObservableProperty] private ObservableCollection _techs; [ObservableProperty] private ObservableCollection _employees; [ObservableProperty] private ObservableCollection _positions; [ObservableProperty] private EquipmentVisual _selectedEquipmentVisual; [ObservableProperty] private EmployeeVisual _selectedEmployeeVisual; [ObservableProperty] private Position _selectedPosition; partial void OnSelectedEntityChanged(Entity value) { if (_currentWindow != null) { switch (value.Id) { case 0: GetTeches(); ShowTeches(); break; case 1: GetEmployees(); ShowEmployees(); break; case 2: GetPositions(); ShowPositions(); break; } } } //################################################################################################################### public MainWindowViewModel(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; Entities = new(); Entities.Add(new Entity(){Id = 0, Name = "Техника"}); Entities.Add(new Entity(){Id = 1, Name = "Сотрудники"}); Entities.Add(new Entity(){Id = 2, Name = "Должности"}); SelectedEntity = Entities[0]; using (var equipmentRepository = _serviceProvider.GetService()) { List equipments = equipmentRepository.GetAll(); Techs = new ObservableCollection(ConvertListEqToEqVis(equipments)); } } //################################################################################################################### private void GetTeches() { using (var equipmentRepository = _serviceProvider.GetService()) { List teches = equipmentRepository.GetAll(); Techs = new ObservableCollection(ConvertListEqToEqVis(teches)); } } public void GetEmployees() { using (var employeeRepository = _serviceProvider.GetService()) { var employees = employeeRepository.GetAll(); Employees = new ObservableCollection(ConvertListEmplToEmplVis(employees)); } } public void GetPositions() { using (var positionRepository = _serviceProvider.GetService()) { var positions = positionRepository.GetAll(); Positions = new ObservableCollection(positions); } } public void ShowTeches() { _currentWindow.ScrollViewerDataGridTech.IsVisible = true; _currentWindow.ScrollViewerDataGridEmpl.IsVisible = false; _currentWindow.ScrollViewerDataGridPos.IsVisible = false; } public void ShowEmployees() { _currentWindow.ScrollViewerDataGridTech.IsVisible = false; _currentWindow.ScrollViewerDataGridEmpl.IsVisible = true; _currentWindow.ScrollViewerDataGridPos.IsVisible = false; } public void ShowPositions() { _currentWindow.ScrollViewerDataGridTech.IsVisible = false; _currentWindow.ScrollViewerDataGridEmpl.IsVisible = false; _currentWindow.ScrollViewerDataGridPos.IsVisible = true; } private void DoubleTappedTechDataGrid() { var vm = ActivatorUtilities.CreateInstance(_serviceProvider, EquipmentFactory.CreateFromVisual(SelectedEquipmentVisual)); var win = ActivatorUtilities.CreateInstance(_serviceProvider, vm); win.ShowDialog(_currentWindow); } private void DoubleTappedEmployeeDataGrid() { } private void DoubleTappedPositionDataGrid() { } public List ConvertListEqToEqVis(List equipments) { List result = new List(); foreach (var item in equipments) { EquipmentVisual eq = new EquipmentVisual(); using (var empRepo = _serviceProvider.GetRequiredService()) { eq = EquipmentVisualFactory.CreateFromEquipment(item); eq.CurrentEmployee = empRepo.GetById(item.CurrentEmployeeId); } result.Add(eq); } return result; } public List ConvertListEmplToEmplVis(List employees) { List result = new List(); foreach (var item in employees) { EmployeeVisual eve = new EmployeeVisual(); using (var posRepo = _serviceProvider.GetRequiredService()) { eve = EmployeesVisualFactory.CreateFromEmployee(item); eve.Position = posRepo.GetById(item.PositionId); } result.Add(eve); } return result; } public void SetScreen(MainWindow window) { _currentWindow = window; Console.WriteLine(window); ShowTeches(); INIT(); } private void INIT() { _currentWindow.DataGridTech.DoubleTapped += (sender, args) => DoubleTappedTechDataGrid(); _currentWindow.DataGridEmployees.DoubleTapped += (sender, args) => DoubleTappedEmployeeDataGrid(); _currentWindow.DataGridPositions.DoubleTapped += (sender, args) => DoubleTappedPositionDataGrid(); } }