/
anasteishabalandina
/
GeometryShapes
Обзор
Документация
Войти
/
anasteishabalandina
/
GeometryShapes
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Lab5/LoadingWindowViewModel.cs
167 строк
4 KB
Anastaisha8
lab_5
16 дек 2025, 02:12
16 дек 2025, 02:12
ed2837c
Код
Авторство
О чём код?
using System; using ReactiveUI; namespace Lab5; /// <summary> /// ViewModel для окна прогресса загрузки. /// </summary> public class ProgressWindowViewModel : ReactiveObject { private string _title = "Прогресс"; private string _caption = "Выполнение операции"; private string? _subtitle = "Подготовка..."; private string _buttonText = "Отмена"; private string _progressSummary = "0 / 0"; private string _elapsedText = "00:00"; private double _maxProgress = 1; private double _progressValue = 0; private bool _isActionEnabled = true; private bool _isCompletionState; private ActionCommand? _actionButtonCommand; /// <summary> /// Заголовок окна. /// </summary> public string Title { get => _title; set => this.RaiseAndSetIfChanged(ref _title, value); } /// <summary> /// Основная подпись. /// </summary> public string Caption { get => _caption; set => this.RaiseAndSetIfChanged(ref _caption, value); } /// <summary> /// Дополнительная подпись. /// </summary> public string? Subtitle { get => _subtitle; set => this.RaiseAndSetIfChanged(ref _subtitle, value); } /// <summary> /// Подпись кнопки. /// </summary> public string ButtonText { get => _buttonText; set => this.RaiseAndSetIfChanged(ref _buttonText, value); } /// <summary> /// Строка с суммарным прогрессом. /// </summary> public string ProgressSummary { get => _progressSummary; set => this.RaiseAndSetIfChanged(ref _progressSummary, value); } /// <summary> /// Текст с прошедшим временем. /// </summary> public string ElapsedText { get => _elapsedText; set => this.RaiseAndSetIfChanged(ref _elapsedText, value); } /// <summary> /// Максимальное значение прогресса. /// </summary> public double MaxProgress { get => _maxProgress; set => this.RaiseAndSetIfChanged(ref _maxProgress, value); } /// <summary> /// Текущее значение прогресса. /// </summary> public double ProgressValue { get => _progressValue; set => this.RaiseAndSetIfChanged(ref _progressValue, value); } /// <summary> /// Признак доступности кнопки действия. /// </summary> public bool IsActionEnabled { get => _isActionEnabled; set { if (this.RaiseAndSetIfChanged(ref _isActionEnabled, value)) { _actionButtonCommand?.RaiseCanExecuteChanged(); } } } /// <summary> /// Признак завершения операции. /// </summary> public bool IsCompletionState { get => _isCompletionState; set => this.RaiseAndSetIfChanged(ref _isCompletionState, value); } /// <summary> /// Команда для основной кнопки. /// </summary> public ActionCommand? ActionButtonCommand { get => _actionButtonCommand; set => this.RaiseAndSetIfChanged(ref _actionButtonCommand, value); } /// <summary> /// Сбрасывает кнопку в состояние отмены. /// </summary> public void ResetButtonState() { IsCompletionState = false; ButtonText = "Отмена"; IsActionEnabled = true; } /// <summary> /// Переключает кнопку в состояние завершения. /// </summary> public void SwitchToCompletionState() { IsCompletionState = true; ButtonText = "Закрыть"; IsActionEnabled = true; } /// <summary> /// Делает кнопку недоступной (после отмены). /// </summary> public void DisableCancellationButton() { IsActionEnabled = false; } /// <summary> /// Обновляет значения прогресса. /// </summary> /// <param name="parCurrent">Текущее значение.</param> /// <param name="parMax">Максимальное значение.</param> public void UpdateProgress(double parCurrent, double parMax) { MaxProgress = parMax; ProgressValue = parCurrent; ProgressSummary = $"{parCurrent:N0} / {parMax:N0}"; } }