Я новичок в лямбда, поэтому, если мне не хватает важной информации в моем описании, скажите, пожалуйста. Я приведу пример как можно проще.
Я перебираю код другого, и у них есть один класс, наследующий от другого. Сначала производный класс, наряду с лямбда-выражением, испытывает трудности с пониманием:
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)
выше. Я не понимаю, откуда приходит "р".
Здесь базовый класс:
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 '=>'
. Это немного смутило меня Я думал, что это сработает.
Может ли кто-нибудь объяснить, что происходит здесь?