Est-il possible de réécrire cette méthode d'extension sans le paramètre?Est-il possible de réécrire cette méthode d'extension délicate?
public static string PropertyName<T>(this T obj, Expression<Func<T>> property)
{
var memberExpression = property.Body as MemberExpression;
if (memberExpression == null)
throw new ArgumentException("Expression must be a MemberExpression.", "property");
return memberExpression.Member.Name;
}
Ceci est le code de test de la fonction.
string TEST = Guid.NewGuid().ToString();
string propertyName = TEST.PropertyName(() => TEST);
Ceci est le résultat:
propertyName = "TEST"
Je voudrais réécrire le code à ceci:
string propertyName = TEST.PropertyName();
Ps. Je ne suis pas intéressé par une version statique de cette méthode!
Pour ceux qui ne voient pas le point de cette fonction. Dans le modèle MVVM, vous avez notifié la modification d'une propriété. Comme ça.
this.RaisePropertyChanged("TEST");
C'est une mauvaise approche puisque le nom de la propriété est hardcoded. Avec l'aide de la méthode d'extension, vous aurez ceci:
this.RaisePropertyChanged(()=>Test);
Je voudrais réécrire la méthode d'extension à ceci:
this.RaisePropertyChanged(Test.PropertyName());
est Ci-dessous un exemple de code de mon projet MVVM. (Ce qui est une propriété de modèle)
public DateTime Start
{
get { return WorkModel.Start; }
set
{
if (WorkModel.Start != value)
{
WorkModel.Start = new DateTime(SelectedDate.Year, SelectedDate.Month, SelectedDate.Day, value.Hour, value.Minute, value.Second);
this.RaisePropertyChanged("Start");
this.RaisePropertyChanged("TotalWork");
}
}
}
comment utiliseriez-vous cela? –
Veuillez lire la question. "TEST.PropertyName();" –
Renvoie le nom de la propriété. Ceci est utile dans le modèle MVVM. –