Ответ 1
An Expression<TDelegate>
представляет абстрактное синтаксическое дерево лямбда-выражения. Поэтому вам просто нужно проанализировать это дерево синтаксиса, чтобы узнать имя свойства:
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
{
var memberExpr = propertyExpression.Body as MemberExpression;
if (memberExpr == null)
throw new ArgumentException("propertyExpression should represent access to a member");
string memberName = memberExpr.Member.Name;
RaisePropertyChanged(memberName);
}