diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-07-16 15:51:33 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2018-07-16 15:51:33 +0300 |
| commit | 13e34402f91fae6229b2d9719ddb48ced1d37fbf (patch) | |
| tree | 1b60f7f1f719403ede6f3ebbfe6077ca673fe792 /Software/Visual_Studio/Tango.BL/ObservableEntity.cs | |
| parent | c326bf5d9c1290ecc79739a1938c0a75b276f552 (diff) | |
| download | Tango-13e34402f91fae6229b2d9719ddb48ced1d37fbf.tar.gz Tango-13e34402f91fae6229b2d9719ddb48ced1d37fbf.zip | |
Some fixed and improvements.
Diffstat (limited to 'Software/Visual_Studio/Tango.BL/ObservableEntity.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.BL/ObservableEntity.cs | 98 |
1 files changed, 97 insertions, 1 deletions
diff --git a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs index 7c82d927b..99d7360ef 100644 --- a/Software/Visual_Studio/Tango.BL/ObservableEntity.cs +++ b/Software/Visual_Studio/Tango.BL/ObservableEntity.cs @@ -22,6 +22,7 @@ using Tango.Serialization; using System.Xml.Serialization; using Newtonsoft.Json; using Tango.Logging; +using System.ComponentModel; namespace Tango.BL { @@ -35,6 +36,7 @@ namespace Tango.BL public abstract class ObservableEntity<T> : ExtendedObject, IObservableEntity where T : class, IObservableEntity { private Regex regExDAL; + private List<KeyValuePair<String, String>> _currentErrors = new List<KeyValuePair<string, string>>(); //Holds the current validation errors. /// <summary> /// Occurs after this observable has been saved. @@ -323,9 +325,36 @@ Maybe you have deleted an entity that was no yet inserted into database?", LogCa /// Will throw an exception with the proper message if one of the fields is invalid. /// </summary> /// <param name="context">The context.</param> - public virtual void Validate(ObservablesContext context) + public virtual bool Validate(ObservablesContext context) { + HasErrors = false; + _currentErrors.Clear(); + if (ValidationErrors == null) + { + ValidationErrors = new ObservableCollection<string>(); + } + + ValidationErrors.Clear(); + + OnValidating(context); + + foreach (var prop in this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) + { + foreach (var validation in prop.GetCustomAttributes<ValidationAttribute>()) + { + if (!validation.IsValid(prop.GetValue(this))) + { + _currentErrors.Add(new KeyValuePair<string, string>(prop.Name, validation.ErrorMessage)); + ValidationErrors.Add(validation.ErrorMessage); + } + } + + HasErrors = _currentErrors.Count > 0; + RaiseError(prop.Name); + } + + return !HasErrors; } public DbSet<T1> GetDbSet<T1>(ObservablesContext context) where T1 : class, IObservableEntity @@ -333,6 +362,73 @@ Maybe you have deleted an entity that was no yet inserted into database?", LogCa return GetDbSet(context) as DbSet<T1>; } + public IEnumerable GetErrors(string propertyName) + { + return _currentErrors.Where(x => x.Key == propertyName).Select(x => x.Value).ToList(); + } + + protected virtual void OnValidating(ObservablesContext context) + { + + } + + protected void InsertError(String propName, String error) + { + _currentErrors.Add(new KeyValuePair<string, string>(propName, error)); + } + + private bool _validateOnPropertyChanged; + [NotMapped] + public bool ValidateOnPropertyChanged + { + get { return _validateOnPropertyChanged; } + set { _validateOnPropertyChanged = value; RaisePropertyChangedAuto(); } + } + + + /// <summary> + /// Invoked the <see cref="ErrorsChanged"/> event. + /// </summary> + /// <param name="propName">Name of the property.</param> + protected void RaiseError(String propName) + { + ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propName)); + } + + private bool _hasErrors; + /// <summary> + /// Gets a value that indicates whether the entity has validation errors. + /// </summary> + [NotMapped] + public bool HasErrors + { + get { return _hasErrors; } + set { _hasErrors = value; RaisePropertyChangedAuto(); } + } + + private ObservableCollection<String> _validationErrors; + /// <summary> + /// Gets or sets the validation errors. + /// </summary> + [NotMapped] + public ObservableCollection<String> ValidationErrors + { + get { return _validationErrors; } + protected set { _validationErrors = value; RaisePropertyChangedAuto(); } + } + + public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged; + + protected override void RaisePropertyChanged(string propName) + { + base.RaisePropertyChanged(propName); + + if (ValidateOnPropertyChanged) + { + Validate(null); + } + } + #region Operator Overloading //public static bool operator ==(ObservableEntity<T> observable1, ObservableEntity<T> observable2) |
