diff --git a/Presence.Desktop/ViewModels/MainWindowViewModel.cs b/Presence.Desktop/ViewModels/MainWindowViewModel.cs index 4cbb742..a759353 100644 --- a/Presence.Desktop/ViewModels/MainWindowViewModel.cs +++ b/Presence.Desktop/ViewModels/MainWindowViewModel.cs @@ -1,4 +1,5 @@ using DocumentFormat.OpenXml.Bibliography; +using domain.Models; using domain.UseCase; using ReactiveUI; using System; @@ -6,13 +7,13 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Reactive.Linq; +using System.Windows.Input; namespace Presence.Desktop.ViewModels { public class MainWindowViewModel : ViewModelBase { private readonly GroupUseCase _groupUseCase; - private List groupPresentersDataSource = new List(); private ObservableCollection _groups; public ObservableCollection Groups => _groups; @@ -25,9 +26,22 @@ namespace Presence.Desktop.ViewModels private GroupPresenter? _selectedGroupItem; - public ObservableCollection Users { get => _users; } + public ObservableCollection Users { get => _users; } private ObservableCollection _users; + // Список опций сортировки + public List SortOptions { get; } = new List { "По фамилии", "По убыванию" }; + + private string _selectedSortOption; + public string SelectedSortOption + { + get => _selectedSortOption; + set => this.RaiseAndSetIfChanged(ref _selectedSortOption, value); + } + + public ICommand RemoveAllStudentsCommand { get; } + public ICommand AddStudentCommand { get; } + public MainWindowViewModel(GroupUseCase groupUseCase) { _groupUseCase = groupUseCase; @@ -52,6 +66,13 @@ namespace Presence.Desktop.ViewModels this.WhenAnyValue(vm => vm.SelectedGroupItem) .Subscribe(vm => SetUsers()); + + // Обработчик изменения сортировки + this.WhenAnyValue(vm => vm.SelectedSortOption) + .Subscribe(_ => SortUsers()); + + RemoveAllStudentsCommand = ReactiveCommand.Create(RemoveAllStudents); + AddStudentCommand = ReactiveCommand.Create(AddStudent); } private void SetUsers() @@ -63,6 +84,70 @@ namespace Presence.Desktop.ViewModels { Users.Add(item); } + + // Сортировка при изменении группы + SortUsers(); + } + + private void SortUsers() + { + if (SelectedGroupItem?.users == null) return; + + var sortedUsers = SelectedGroupItem.users.ToList(); + + switch (SelectedSortOption) + { + case "По фамилии": + sortedUsers = sortedUsers.OrderBy(u => u.Name).ToList(); + break; + case "По убыванию": + sortedUsers = sortedUsers.OrderByDescending(u => u.Name).ToList(); + break; + } + + Users.Clear(); + foreach (var item in sortedUsers) + { + Users.Add(item); + } + } + + private void RemoveAllStudents() + { + if (SelectedGroupItem == null) return; + + // Удаляем всех студентов через UseCase + _groupUseCase.RemoveAllStudentsFromGroup(SelectedGroupItem.Id); + + // Создаем новый список пользователей (пустой) + SelectedGroupItem.users = new List(); // Перезаписываем users новым пустым списком + SetUsers(); // Обновляем отображение + } + + private void AddStudent() + { + if (SelectedGroupItem == null) return; + + var newStudent = new UserPresenter + { + Name = "Новый студент", + Guid = Guid.NewGuid(), + Group = SelectedGroupItem + }; + + // Добавляем студента в базу данных через UseCase + _groupUseCase.AddStudentToGroup(SelectedGroupItem.Id, new User + { + Guid = newStudent.Guid, + FIO = newStudent.Name + }); + + // Создаем новый список пользователей, добавляем нового студента и присваиваем его + var updatedUsers = SelectedGroupItem.users?.ToList() ?? new List(); // Создаем новый список из существующих пользователей или пустой + updatedUsers.Add(newStudent); // Добавляем нового студента + + SelectedGroupItem.users = updatedUsers; // Перезаписываем users новым списком с добавленным студентом + SetUsers(); // Обновляем отображение } } } diff --git a/Presence.Desktop/Views/MainWindow.axaml b/Presence.Desktop/Views/MainWindow.axaml index 47ca776..20b5874 100644 --- a/Presence.Desktop/Views/MainWindow.axaml +++ b/Presence.Desktop/Views/MainWindow.axaml @@ -9,40 +9,48 @@ Title="Presence.Desktop" x:DataType="vm:MainWindowViewModel"> - - - - - - - - - - - - + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +