2010-10-22 11 views
29

मुझे कक्षा मिली है। यह ListBox आइटम के लिए ViewModels का वर्णन करता है।एक सूची बॉक्स के लिए दो आइटम टेम्पलेट

<ListBox ItemsSource="{Binding Fruits}"> 

और मैं

class BananaViewModel : FruitViewModel 

और

class AppleViewModel : FruitViewModel 

Fruits मिल गया है BananaViewModel और AppleViewModel रों जो ItemsSource के लिए बाध्य है शामिल हैं।

मैं सेब और केले के लिए अलग-अलग टेम्पलेट कैसे बना सकता हूं? वे एक सूची में होना चाहिए लेकिन अलग-अलग टेम्पलेट्स

उत्तर

51

आप DataTemplates कि एक x:Key बिना DataType निर्दिष्ट करने के द्वारा एक विशेष प्रकार के किसी भी मामले पर लागू होते हैं परिभाषित कर सकते हैं। इस विधि का उपयोग करके आप ItemTemplate पर कुछ भी निर्दिष्ट नहीं करते हैं - टेम्पलेट स्वचालित रूप से लागू होते हैं।

<ListBox ItemsSource="{Binding Path=MixedList}"> 
    <ListBox.Resources> 
     <DataTemplate DataType="{x:Type local:BananaViewModel}"> 
      <TextBlock Text="{Binding Name}" Foreground="Yellow"/> 
     </DataTemplate> 
     <DataTemplate DataType="{x:Type local:AppleViewModel}"> 
      <TextBlock Text="{Binding Name}" Foreground="Red"/> 
     </DataTemplate> 
    </ListBox.Resources> 
</ListBox> 
+0

अच्छी चीजें, धन्यवाद! – xSeder

+2

उल्लेख करने के लिए धन्यवाद कि आपको एक्स: कुंजी को छोड़ना होगा! –

3

XAML में ListView पर आप ItemTemplateSelector घोषित कर सकते हैं। इसके लिए मूल्य एक स्थिर संसाधन या इसी तरह से आएगा।

आपके टेम्पलेट चयनकर्ता के कार्यान्वयन को DataTemplateSelector लागू करना चाहिए और मूल रूप से 'if' कथन शामिल होगा जो बाध्य आइटम के प्रकार के आधार पर सही डेटा टेम्पलेट चुनता है। यह संभवत: कंटेनर के संसाधनों से डेटा टेम्पलेट को ढूंढ पाएगा (शायद FindResource फ़ंक्शन का उपयोग कर)।

संपादित करें: शायद अच्छा लिंक? http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselectorमृत लिंक।

+0

कृपया यहां एक नमूना कोड जोड़ें –

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