/
dOJer113
/
Insect
Обзор
Документация
Войти
/
dOJer113
/
Insect
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
server
UI/ViewModels/EditInsect/EditInsectViewModelBase.cs
77 строк
2 KB
alex
Валидация
21 дек 2025, 20:06
21 дек 2025, 20:06
640f9dc
Код
Авторство
О чём код?
using System.Reactive; using System.Threading.Tasks; using insects; using UI.Models; using ReactiveUI; namespace UI.ViewModels.EditInsect; /// <summary> /// Базовая VM для модальных окон насекомых. /// </summary> public abstract class EditInsectViewModelBase<T> : ViewModelBase, IEditInsectDialogViewModel where T : Insect { private readonly Mode _mode; private string _validationMessage = string.Empty; private bool _hasValidationMessage; protected EditInsectViewModelBase(T? insect, Mode mode) { Editable = (T?)insect?.Clone() ?? CreateDefault(); _mode = mode; Title = BuildTitle(mode); ConfirmCommand = ReactiveCommand.CreateFromTask(ValidateAndReturnAsync); } public T Editable { get; } Insect UI.ViewModels.EditInsect.IEditInsectDialogViewModel.Editable => Editable; public bool IsReadOnly => _mode == Mode.Delete; public bool ShowId => _mode != Mode.Create && _mode != Mode.InitializePrototype; public string Title { get; } public ReactiveCommand<Unit, T?> ConfirmCommand { get; } public string ValidationMessage { get => _validationMessage; private set { this.RaiseAndSetIfChanged(ref _validationMessage, value); HasValidationMessage = !string.IsNullOrWhiteSpace(value); } } public bool HasValidationMessage { get => _hasValidationMessage; private set => this.RaiseAndSetIfChanged(ref _hasValidationMessage, value); } protected abstract T CreateDefault(); protected abstract string BuildTitle(Mode mode); private async Task<T?> ValidateAndReturnAsync() { var errors = InsectValidator.Validate(Editable, requireId: ShowId); if (errors.Count > 0) { ValidationMessage = string.Join("\n", errors); return null; } await Task.CompletedTask; ValidationMessage = string.Empty; return Editable; } public Mode Mode => _mode; public void SetServerError(string message) { ValidationMessage = message; } }