2012-04-19 6 views
5

मैं एक आइटम नियंत्रण बनाने की कोशिश कर रहा हूं जिसे मेटाडेटा द्वारा क्रमबद्ध विभिन्न वस्तुओं को प्रदर्शित करने का आरोप लगाया जाता है। प्रत्येक आइटम में एकाधिक मेटाडेटा हो सकता है। उदाहरण के लिए, "वार्तालाप" प्रकार की एक वस्तु में "अध्याय", "अधिनियम" और "वॉल्यूम" मेटाडेटा हो सकता है।डब्ल्यूपीएफ - समूह शैलियों: क्या हम केवल "नाम" संपत्ति से जुड़ सकते हैं?

WPF में समूहबद्ध करने के तरीके को खोजने के बाद, मुझे ग्रुप स्टाइल और प्रॉपर्टी ग्रुप डिस्क्रिप्शन क्लास के बारे में पता चला।

मैंने अपनी खुद की कक्षा बनाई जो प्रॉपर्टी ग्रुप डिस्क्रिप्शन से विरासत में है और जो "मेटाडाटा" प्रकार का ऑब्जेक्ट देता है।

क्या वैसे भी है कि मेरे आइटम्स कंट्रोल के समूह स्टाइल डेटा टेम्पलेट में मैं वापस ऑब्जेक्ट से जुड़ सकता हूं (यानी "मेटाडाटा" ऑब्जेक्ट) और उसके बाद अपनी संपत्तियों को प्रदर्शित कर सकता हूं? या क्या मुझे "नाम" से बांधने के लिए मजबूर किया गया है?

दूसरे शब्दों में:

<ItemsControl.GroupStyle> 
    <GroupStyle> 
     <GroupStyle.HeaderTemplate> 
      <DataTemplate> 
        Am I forced to bind to "Name" here ? 
      </DataTemplate> 
     </GroupStyle.HeaderTemplate> 
    </GroupStyle> 
</ItemsControl.GroupStyle> 

उत्तर

13

GroupStyle में डिफ़ॉल्ट DataContext करके आप इस CollectionViewGroup Properties करने के लिए बाध्य कर सकते हैं। लेकिन निश्चित रूप से यदि आपको आवश्यकता हो तो आप किसी भी अन्य BindingSource सेट कर सकते हैं।

आप अपने समूह उपयोग में पहली वस्तु चाहते हैं:

<TextBlock Text="{Binding Path=Items[0].YourStringProperty}" /> 
+1

लेकिन आइटम आइटम की सरणी और GroupDescription वस्तु की नहीं है। अर्थात। 'मेटाडाटा' संपत्ति अप्राप्य बनी हुई है? – Dani

0

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

लेकिन निश्चित रूप से आप अपने डेटा टेम्पलेट को परिभाषित कर सकते हैं और विभिन्न संपत्तियों के लिए बाध्यकारी कर सकते हैं।

<DataTemplate> 
<TextBlock Text="{Binding XXXXX}"/> 
</DataTemplate> 
संबंधित मुद्दे

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