ad magic string w PropertyChanged

nigdy nie podobały mi się te magic stringi
przy wywoływaniu PropertyChanged
okazuje się że innym też nie
patrz ile tu rozwiązań i porównanie wydajności:

http://blog.amusedia.com/2013/06/inotifypropertychanged-implementation.html

chyba fajna opcja to klaska Field<T>
ustalająca nazwę właściwości tylko raz – w konstruktorze

w .net 4.5 jest już [CallerMemberName] i sprawa staje się jeszcze prostsza

+ moje zastosowanie (trochę zmodyfikowane):

using System;
using System.Linq.Expressions;

namespace SigViewer
{
class Field<T>
{
public string PropertyName;
public T Value;

public Field(Expression<Func<T>> expression)
{
PropertyName = GetPropertyName(expression);
}

private string GetPropertyName<TFunType>(Expression<Func<TFunType>> expression)
{
var memberExpression = (MemberExpression)expression.Body;
return memberExpression.Member.Name;
}

public static implicit operator T(Field<T> t)
{
return t.Value;
}
}
}

using System.ComponentModel;
namespace SigViewer
{
class ChartViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private readonly Field<string> _title;
public string Title
{
get { return _title; }
set { Set(_title, value); }
}
public ChartViewModel()
{
_title = new Field<string>(() => Title);
}
protected void Set<T>(Field<T> field, T value)
{
field.Value = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(field.PropertyName));
}
}
}