2009-06-16 19 views
19

यदि मेरे पास ItemsControl से निकाला गया कोई घटक है, तो क्या मैं इसके बच्चों के संग्रह तक पहुंच सकता हूं ताकि मैं कुछ क्रियाओं को करने के लिए उनके माध्यम से लूप कर सकूं? मुझे इस समय कोई आसान तरीका नहीं दिख रहा है।मैं आइटम्स कंट्रोल के बच्चों तक कैसे पहुंच सकता हूं?

उत्तर

41

एक समाधान एसईबी के लिए इसी तरह की है, लेकिन शायद बेहतर प्रदर्शन के साथ:

for(int i = 0; i < itemsControl.Items.Count; i++) 
{ 
    UIElement uiElement = 
     (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i); 
} 
+0

+1 के साथ जाना चाहिए, धन्यवाद, हालांकि यह मेरी समस्या हल करने के लिए आसान है –

+0

ऐसा लगता है कि नियंत्रण नहीं है प्रस्तुत/अभी तक दिखाया गया है, इसमें कोई आइटम नहीं होगा। – Maslow

0

मुझे लगता है कि ItemsControl.Items[index] काम नहीं करता है, तो?

मैं मजाकिया नहीं हूं, और मैंने खुद के लिए जांच नहीं की है - यह मेरा पहला अनुमान है। अक्सर नियंत्रण में एक आइटम इंडेक्सर संपत्ति होगी, भले ही यह डाटाबेस हो।

foreach (var item in itemsControl1.Items) 
{ 
    Console.WriteLine(item.ToString()); 
} 
+2

यह नहीं करता है ' "बच्चे" तत्वों (नियंत्रण) को पुनः प्राप्त नहीं करें, केवल सूची के आइटम, जो आवश्यक रूप से नियंत्रण नहीं हैं। –

+1

नहीं, यदि आप डेटा स्रोत और डेटा टेम्पलेट का उपयोग करते हैं, उदा। डेटा टेम्पलेट में उपयोग करने के लिए तारों का एक भार, आपको आइटम के रूप में स्ट्रिंग वापस मिलती है। –

+0

पर्याप्त मेला। मैं अपना जवाब छोड़ दूंगा क्योंकि आपकी टिप्पणियां उपयोगी हो सकती हैं। –

-2

ItemsControl.Items संपत्ति का उपयोग करें।

+0

मेरी टिप्पणी दोहराने के लिए, यदि आप डेटा स्रोत और डेटा टेम्पलेट का उपयोग करते हैं, उदा। डेटा टेम्पलेट में उपयोग करने के लिए तारों का एक भार, आपको आइटम –

+0

आइटम के रूप में लौटाई जाने वाली स्ट्रिंग मिलती है, तो आपको सेब के समाधान – Oskar

19

देखें अगर यह तुम बाहर में मदद करता है:

foreach(var item in itemsControl.Items) 
{ 
    UIElement uiElement = 
     (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item); 
} 

वहाँ और एक UIElement एक नियंत्रण में तार्किक आइटम बीच एक अंतर है

9

ItemsControl पहचान करने के लिए की डेटाबाउंड बच्चे नियंत्रण (एक ToggleButton की तरह), तो आप इस का उपयोग कर सकते हैं:

for (int i = 0; i < yourItemsControl.Items.Count; i++) 
{ 

    ContentPresenter c = (ContentPresenter)yourItemsControl.ItemContainerGenerator.ContainerFromItem(yourItemsControl.Items[i]); 
    ToggleButton tb = c.ContentTemplate.FindName("btnYourButtonName", c) as ToggleButton; 

    if (tb.IsChecked.Value) 
    { 
     //do stuff 

    } 
} 
+0

'FindName()' को कॉल करने से पहले आपको 'c.ApplyTemplate(); 'कॉल करने की आवश्यकता है या फिर यह शून्य हो जाता है। – Karmacon

+0

@ Karmacon बिना काम करता है 'c.ApplyTemplate();' मेरे लिए ... – rumblefx0

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