Files @ 95e1ae426eb3
Branch filter:

Location: ATITD-Tools/Desert-Paint-Codex/ViewModels/ValidatableViewModelBase.cs

Jason Maltzen
Add an info box when a detected clipped reaction could be extrapolated from a white shift.
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 <string, List<string>> _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<string> {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<DataErrorsChangedEventArgs>? ErrorsChanged;
    }
}