Я новичок в лямбда, так что если я упускаю важную информацию в своем описании, пожалуйста, скажите мне. Я буду приводить пример как можно проще.
Я просматриваю чужой код, и у него один класс наследуется от другого. Вот производный класс сначала, вместе с лямбда-выражением, которое я не могу понять:
class SampleViewModel : ViewModelBase
{
private ICustomerStorage storage = ModelFactory<ICustomerStorage>.Create();
public ICustomer CurrentCustomer
{
get { return (ICustomer)GetValue(CurrentCustomerProperty); }
set { SetValue(CurrentCustomerProperty, value); }
}
private int quantitySaved;
public int QuantitySaved
{
get { return quantitySaved; }
set
{
if (quantitySaved != value)
{
quantitySaved = value;
NotifyPropertyChanged(p => QuantitySaved); //where does 'p' come from?
}
}
}
public static readonly DependencyProperty CurrentCustomerProperty;
static SampleViewModel()
{
CurrentCustomerProperty = DependencyProperty.Register("CurrentCustomer", typeof(ICustomer),
typeof(SampleViewModel), new UIPropertyMetadata(ModelFactory<ICustomer>.Create()));
}
//more method definitions follow..
Обратите внимание на вызов NotifyPropertyChanged(p => QuantitySaved)
бит выше. Я не понимаю, откуда берется "p".
Вот базовый класс:
public abstract class ViewModelBase : DependencyObject, INotifyPropertyChanged, IXtremeMvvmViewModel
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged<T>(Expression<Func<ViewModelBase, T>> property)
{
MvvmHelper.NotifyPropertyChanged(property, PropertyChanged);
}
}
Там много всего, что не относится к вопросу, я уверен, но я хотел сделать ошибку на стороне инклюзивности.
Проблема в том, что я не понимаю, откуда взялся параметр 'p', и как компилятор догадался (очевидно?) заполнить значение типа ViewModelBase из воздуха?
Ради интереса я изменил код с 'p' на 'this', поскольку SampleViewModel наследуется от ViewModelBase, но столкнулся с серией ошибок компилятора, первая из которых гласилаInvalid expression term '=>'
Это меня немного смутило, поскольку я думал, что это будет работать.
Кто-нибудь может объяснить, что здесь происходит?