namespace VideoBrowser.Extensions
{
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using VideoBrowser.Common;
///
/// Defines the
///
public static class INotifyPropertyChangedExtension
{
#region Delegates
///
/// The PropertyChangedInvokerEventHandler
///
/// The
public delegate void PropertyChangedInvokerEventHandler(string propertyName);
#endregion Delegates
#region Methods
///
/// Invokes the properties changed.
///
/// The INotifyPropertyChanged implementation.
/// The invoker.
/// The property name list.
public static void InvokePropertiesChanged(this INotifyPropertyChanged instance, PropertyChangedInvokerEventHandler invoker, params string[] propertyNames)
{
foreach (var propertyName in propertyNames)
{
invoker?.Invoke(propertyName);
}
}
///
/// The IsMatch
///
/// The
/// The
/// The
public static bool IsMatch(this PropertyChangedEventArgs e, params string[] propertyNames)
{
var propertyName = e.PropertyName;
foreach (var name in propertyNames)
{
if (propertyName == name)
{
return true;
}
}
return false;
}
///
/// Sets the specified invoker.
///
///
/// The instance.
/// The invoker.
/// The field.
/// The value.
/// Name of the property.
/// The other optional property names to notify.
/// True if old value and new value are different.
public static bool Set(this INotifyPropertyChanged instance, PropertyChangedInvokerEventHandler invoker, ref T field, T value, [CallerMemberName] string propertyName = null, params string[] propertyNames)
{
if (EqualityComparer.Default.Equals(field, value))
{
return false;
}
field = value;
invoker?.Invoke(propertyName);
return true;
}
///
/// The Set
///
/// The sender
/// The propertyChanged
/// The field
/// The value
/// The range
/// The propertyName
/// The propertyNames
/// The
public static bool Set(this INotifyPropertyChanged sender, PropertyChangedEventHandler propertyChanged, ref double field, double value, RangeDouble range, [CallerMemberName] string propertyName = null, params string[] propertyNames)
{
if (field.IsEqualTo(value))
{
return false;
}
if (value.IsInRange(range.Start, range.End))
{
field = value;
}
propertyChanged?.Invoke(sender, new PropertyChangedEventArgs(propertyName));
return true;
}
///
/// The Set
///
/// The property type.
/// The sender.
/// The property changed.
/// The field.
/// The value.
/// Name of the property.
/// The property names.
/// True if old value and new value are different.
public static bool Set(this INotifyPropertyChanged sender, PropertyChangedEventHandler propertyChanged, ref T field, T value, [CallerMemberName] string propertyName = null, params string[] propertyNames)
{
if (EqualityComparer.Default.Equals(field, value))
{
return false;
}
field = value;
propertyChanged?.Invoke(sender, new PropertyChangedEventArgs(propertyName));
return true;
}
#endregion Methods
}
}