Я создал метод расширения в моей базовой библиотеке для повторного использования:
public static class INotifyPropertyChangedExtensions
{
public static bool SetPropertyAndNotify(this INotifyPropertyChanged sender,
PropertyChangedEventHandler handler, ref T field, T value,
[CallerMemberName] string propertyName = "",
EqualityComparer equalityComparer = null)
{
bool rtn = false;
var eqComp = equalityComparer ?? EqualityComparer.Default;
if (!eqComp.Equals(field,value))
{
field = value;
rtn = true;
if (handler != null)
{
var args = new PropertyChangedEventArgs(propertyName);
handler(sender, args);
}
}
return rtn;
}
}
Это работает с .Net 4.5 из-за CallerMemberNameAttribute . Если вы хотите использовать его с более ранней версией .Net, вам нужно изменить объявление метода с: ...,[CallerMemberName] string propertyName = "", ...
до ...,string propertyName, ...
Использование:
public class Dog : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string _name;
public string Name
{
get { return _name; }
set
{
this.SetPropertyAndNotify(PropertyChanged, ref _name, value);
}
}
}