NotifyPropertyChangedHelper.cs

40 lines | 970 B Blame History Raw Download
using System;
using System.Collections.Generic;
using System.ComponentModel;

namespace WPF.Common.WPF
{
	public class NotifyPropertyChangedHelper
	{
		PropertyChangedEventHandler _propertyChangeHandler;

		public void Add(PropertyChangedEventHandler value)
		{
			_propertyChangeHandler += value;
		}

		public void Remove(PropertyChangedEventHandler value)
		{
			if (_propertyChangeHandler != null) _propertyChangeHandler -= value;
		}

		public void NotifyPropertyChanged(object sender, string propertyName)
		{
			_propertyChangeHandler?.Invoke(sender, new PropertyChangedEventArgs(propertyName));
		}

		public void SetValue<T>(object containingObject, ref T field, T value, params string[] names)
		{
			if (names == null) throw new ArgumentNullException(nameof(names));

			if (!EqualityComparer<T>.Default.Equals(field, value))
			{
				field = value;
				foreach (string t in names)
				{
					NotifyPropertyChanged(containingObject, t);
				}
			}
		}
	}
}