2013-09-06 2 views
9

मेरे पास यह आवश्यकता है, कि मेरे पास आइटम (ऑब्जर्जेबल कोलेक्शन) का संग्रह है, लेकिन मैं केवल चाहता हूं पहली वस्तु प्रदर्शित करने के लिए। आवश्यकता इस तथ्य से आती है कि ज्यादातर मामलों में, संग्रह में केवल एक आइटम होता है। और अंतरिक्ष सीमा के कारण, यहां तक ​​कि यदि संग्रह में एक से अधिक आइटम हैं, तो हम आइटम की संख्या, पहले के विवरण (पूर्व स्थिति के समान प्रस्तुति) और ... प्रतीक को इंगित करना चाहते हैं उपयोगकर्ता जो अधिक आइटम है। और जब माउस यूआई तत्व से अधिक हो जाता है तो पॉपअप अंततः सभी वस्तुओं को प्रदर्शित करेगा।डब्ल्यूपीएफ: किसी संग्रह में केवल एक आइटम से जुड़ने के लिए, आइटम्सकंट्रोल का उपयोग न करें क्योंकि मैं उन सभी को प्रदर्शित नहीं करना चाहता हूं

पहला समाधान मैं के (अन्य सुझाव है कृपया अगर वे बेहतर कर रहे हैं) है सोच सकते हैं इस संग्रह के लिए बाध्य करने के लिए (लेकिन एक ItemsControl का उपयोग नहीं) और परिभाषित एक DataTemplateSelector व्युत्पन्न वर्ग (जो या तो DataTemplate केवल एक ही प्रदर्शित करने के लिए वापसी आइटम, या DateTemplate जिसमें ... और संग्रह में आइटम्स की संख्या के आधार पर अधिक जानकारी के लिए पॉपअप है) और इसे ContentTemplateSelector के रूप में उपयोग करें।

लेकिन अब मेरा प्रश्न: कैसे मेरे DataTemplate दोनों XAML में दिखेंगे, ताकि वे संग्रह में केवल पहला आइटम प्रदर्शित कर सकें? जाहिर है, मेरे पास ItemsControl नहीं हो सकता है।

अद्यतन:

अब मैं (के बाद से वहाँ पहले से ही है कुछ जवाब मैं इसे अब और नहीं हटा सकते हैं) यह काम करते हैं और इस बात से सहमत इस सवाल का बंद किया जा सकता बनाने में कामयाब रहे।

मुझे वास्तव में पता था कि संग्रह में एक निश्चित वस्तु से कैसे जुड़ना है, लेकिन यह वह जगह नहीं थी जहां मैं उलझन में हूं। मुझे लगा कि मुझे ContentControl का उपयोग करना चाहिए क्योंकि एक उत्तर से पता चलता है। लेकिन मैंने सोचा क्योंकि मुझे संग्रह में वस्तुओं की संख्या के आधार पर उचित संग्रह (0-) का चयन करने के लिए पूरे संग्रह (एक अनुक्रमित आइटम पर नहीं) से जुड़ना होगा और का चयन करने के लिए DataTemplateSelector का उपयोग करना होगा। कोड इस तरह दिखेगा:

<ContentControl Content="{Binding MyCollection}" 
      ContentTemplateSelector="{StaticResource MyTemplateSelector}" /> 

और MyTemplateSelector में मैं के बाद से वहाँ मेरे संग्रह के लिए कोई संदर्भ है, क्योंकि यह संसाधन के रूप में परिभाषित किया गया है कि यह कैसे उपयोग करने के लिए यकीन नहीं था और यह MyCollection की जानकारी नहीं है । हालांकि, यह बहुत आसान साबित हुआ, DataTemplate नाम या किसी अन्य संदर्भ को जानने के बिना अनुक्रमित आइटम का संदर्भ ले सकता है। सीधे शब्दों में इस तरह: एक संपत्ति के लिए बाध्य करने के लिए

{Binding Items[0]} 

या:

<DataTemplate> 
    <TextBlock Text="{Binding [0].PropertyName}" /> 
<DataTemplate /> 
+0

संभावित डुप्लिकेट [डब्ल्यूपीएफ बाध्यकारी संग्रह में वस्तुओं को प्रमाणित करने के लिए बाध्यकारी] (http://stackoverflow.com/questions/1715478/wpf-binding-to-certains-items-in-collection) – Jon

+0

यदि इनमें से किसी एक उत्तर ने आपकी सहायता की अपनी समस्या का समाधान करने के लिए, कृपया इसे स्वीकार करें, ताकि इस प्रश्न को उत्तर के रूप में चिह्नित किया जा सके। – Sheridan

उत्तर

8

इस

<ContentControl Content="{Binding YourCollection[0]}"> 
    <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Name}"></TextBlock> 
     </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl> 
21

प्रयास करें एक संग्रह से केवल एक आइटम के लिए बाध्य करने के लिए, आप निम्न सिंटैक्स का उपयोग कर सकते हैं संग्रह से एक आइटम का:

{Binding Items[0].Property} 

आप लिंक किए गए पेज से MSDN पर Binding.Path Property पेज ... से संपत्ति पथ सिंटैक्स के बारे में और अधिक जानकारी प्राप्त कर सकते हैं:

• एक संपत्ति की Indexers संपत्ति नाम निम्नलिखित वर्ग कोष्ठक जहां इंडेक्सर लागू किया जाता है के भीतर निर्दिष्ट किया जा सकता । उदाहरण के लिए, क्लॉज Path=ShoppingCart[0] इंडेक्स को बाइंडिंग सेट करता है जो आपकी संपत्ति की आंतरिक इंडेक्सिंग को शाब्दिक स्ट्रिंग "0" को कैसे संभालता है। एकाधिक सूचकांक भी समर्थित हैं।

2

ठीक है, पार्टी के लिए देर हो चुकी है, लेकिन मैंने सोचा कि मैं मेरी 2 सेंट वैसे भी साझा करते हैं: मैं बेहतर एक बेवकूफी (XAML-) देख सकते हैं और एक दृश्य मॉडल अपनी प्रस्तुति जरूरतों के करीब के साथ जाना चाहते हैं।

अनुवादित: आपके मौजूदा व्यू-मॉडल (या कच्चे डेटा) और वस्तुओं के संग्रह को सीधे देखने के बजाय मैप करने का सुझाव है, मैं सुझाव देता हूं कि उचित दृश्य-मॉडल पर YourItemViewModel FirstItem संपत्ति और bool HasMore संपत्ति जैसे कुछ दिखाए । यह दूसरा दृश्य-मॉडल आसानी से यूनिट-टेस्टेबल होगा यह सुनिश्चित करने के लिए कि यह व्यावहारिक रूप से व्यवहार करता है, और कम तर्क के साथ आसानी से मैप किया जाएगा, ताकि संभावित हार्ड-टू-टेस्ट समस्याओं को देखने में मदद मिल सके।

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

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