using System.Collections.Generic;
using System.ComponentModel;
namespace ConsoleApplication4
public static class Program
public static void Main()
var person = new Person();
person.PropertyChanged += PersonChanged;
private static void PersonChanged( object s, PropertyChangedEventArgs e )
if (e.PropertyName == "First")
Console.WriteLine( "{0} CHANGED TO {1}", e.PropertyName, p.First );
else if(e.PropertyName == "Last")
Console.WriteLine( "{0} CHANGED TO {1}", e.PropertyName, p.Last );
public class Person : Notifier
set { SetField( ref _first, value, "First" ); }
set { SetField( ref _last, value, "First" ); }
public class Notifier : INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged = delegate{};
protected bool SetField<T>( ref T field, T value, string propertyName )
if ( EqualityComparer<T>.Default.Equals( field, value ) )
OnPropertyChanged( propertyName );
private void OnPropertyChanged( string propertyName )
PropertyChanged.Invoke( this, new PropertyChangedEventArgs( propertyName ) );