using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; namespace DesertPaintCodex.ViewModels { public class ValidatableViewModelBase : ViewModelBase, INotifyDataErrorInfo { private static readonly string [] NoErrors = new string[0]; private Dictionary > _errorsByPropertyName = new () ; public IEnumerable GetErrors(string? propertyName) { if (propertyName != null && _errorsByPropertyName. TryGetValue(propertyName, out var errorList)) { return errorList; } return NoErrors; } protected virtual void SetError(string propertyName, string error) { if (_errorsByPropertyName.TryGetValue(propertyName, out var errorList)) { if (!errorList.Contains(error)) { errorList.Add(error); } } else { _errorsByPropertyName.Add(propertyName, new List {error}); } ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName)); } protected virtual void RemoveErrors(string propertyName) { if (_errorsByPropertyName.ContainsKey(propertyName)) { _errorsByPropertyName.Remove(propertyName); ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propertyName)); } } public bool HasErrors => _errorsByPropertyName.Count > 0 ; public event EventHandler? ErrorsChanged; } }