मैं एक लैम्ब्डा नौसिखिया हूं, इसलिए यदि मुझे मेरे विवरण में महत्वपूर्ण जानकारी याद आ रही है तो कृपया मुझे बताएं। मैं उदाहरण को यथासंभव सरल रखूंगा।नेट लैम्ब्डा अभिव्यक्ति - यह पैरामीटर कहां से आया?
मैं किसी और के कोड पर जा रहा हूं और उनके पास एक वर्ग से विरासत में एक वर्ग है। इधर, पहले व्युत्पन्न वर्ग है लैम्ब्डा अभिव्यक्ति मुझे समझने में कठिनाई हो रही है के साथ:
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);
}
}
वहाँ उस सवाल का मुझे यकीन है कि करने के लिए उचित नहीं है वहाँ में एक बहुत है, लेकिन मैं समग्रता की ओर गलती करना चाहता था।
समस्या यह है कि, मुझे समझ में नहीं आता कि 'पी' पैरामीटर कहां से आ रहा है, और संकलक कैसे जानता है (स्पष्ट रूप से?) पतली हवा से ViewModelBase के प्रकार मान को भरें?
मस्ती के लिए मैं, 'यह' करने के लिए 'पी' से कोड बदल के बाद से SampleViewModel ViewModelBase से विरासत, लेकिन मैं संकलक त्रुटियों की एक श्रृंखला है, जिनमें से पहले एक Invalid expression term '=>'
यह कहा गया है का सामना करना पड़ा मुझे के बाद से मैं थोड़ा उलझन में सोचा कि काम करेगा।
क्या कोई यह समझा सकता है कि यहां क्या हो रहा है?
आह, ठीक है। तो यह एक विधि घोषणा है। मैंने सोचा था कि सवाल में स्निपेट था - उस पल - अधिसूचनाप्रॉपर्टी चंगेड() को पैरामीटर के रूप में 'पी' के साथ कॉल करना। सभी को धन्यवाद, मेरी आंखें थक गई होंगी। – larryq
नहीं, आप 'इस' का उपयोग नहीं कर सकते क्योंकि यह एक आरक्षित कीवर्ड है। यह पैरामीटर नाम के रूप में कभी मान्य नहीं है। – jason
@larryq: यह NotifyProperty को कॉल कर रहा है * अभिव्यक्ति वृक्ष * के साथ बदल दिया गया है जिसमें एक * पैरामीटर * पी कहा जाता है। NotifyPropertyChanged से औपचारिक पैरामीटर 'संपत्ति' की घोषणा को अलग करने से आप लैम्बडा से पी को अलग नहीं कर सकते हैं। –