2011-04-18 15 views
7

टेप किया गया था मैं जो मैं इस तरह के तत्वों बनाने के लिए उपयोग ग्राहकों की एक सूची है:Monotouch.Dialog कौन सा तत्व

Foreach(Customer c in Customers) 
{ 
    //Make the StyledStringElement 
    //Set the Tapped to action a touch 
    element.Tapped +=() => { Push (new SomeController (c.ClientId)); }; 
} 

समस्या यह है कि जब तत्व उपयोग किया है यह SomeController को पिछले ग्राहक भेजता है()।

मैं टैप किए गए प्रतिनिधि को जानकारी के साथ कैसे सेट कर सकता हूं जो आईडी ग्राहक होगा?

उत्तर

13

आप पाश में स्थानीय चर के रूप में ग्राहक रखने की जरूरत है:

foreach(Customer c in Customers) 
{  
    //Make the StyledStringElement 
    //Set the Tapped to action a touch 
    var currentCustomer = c; 
    element.Tapped +=() => { Push (new SomeController (currentCustomer.ClientId)); }; 
} 

लेकिन इस MonoTouch.Dialog के साथ एक सीमा नहीं है। Here's सामान्य समस्या के बारे में एक लेख।

+0

स्पष्टीकरण उत्कृष्ट था, अब यह पूरी तरह से समझ में आता है। –

+0

वह लेख शानदार है। मैंने अतीत में इस समस्या का सामना किया है और हल किया है, लेकिन रेजनिक का विच्छेदन अद्भुत है। बेसिक ब्रेकडाउन: लम्दा प्रदर्शन करने वाली क्रिया को रनटाइम पर जितनी जल्दी हो सके उतनी ही बनाई जाती है ... उस बिंदु पर फ़ोरैच स्टेटमेंट में इटेटरेटर संग्रह के अंत में स्थानांतरित हो चुका है ... इसलिए संग्रह में अंतिम मूल्य लैम्डा एक्शन में क्या प्रयोग किया जाएगा। इसलिए, स्थानीय चर के लिए लैम्ब्डा में उचित मूल्य इंजेक्ट करने की आवश्यकता है। – NovaJoe

संबंधित मुद्दे