2009-02-18 11 views
14

मैं डेटा टेम्पलेट का उपयोग कर एक आइटम (संग्रह में निहित नहीं) प्रदर्शित करने की कोशिश कर रहा हूं। यहां तक ​​कि मुझे अब तक क्या मिला है, जो कुछ भी प्रदर्शित नहीं कर रहा है। ListBox के साथ एक खाली सूची बॉक्स प्रदर्शित करता है (इसलिए मुझे पता है कि तत्व वहां है)।मैं Silverlight में DataTemplate का उपयोग करके एक आइटम कैसे प्रदर्शित करूं?

 <ItemsControl 
      ItemsSource="{Binding Session}" 
      ItemTemplate="{StaticResource SessionHeaderDataTemplate}" 
      /> 

Session एक ही वस्तु है। मैं डेटा टेम्पलेट का उपयोग करना चाहता हूं क्योंकि मैं अपने ऐप में कहीं और जानकारी प्रदर्शित कर रहा हूं और प्रस्तुति शैली को संसाधन के रूप में परिभाषित करना चाहता था ताकि मैं इसे एक ही स्थान पर अपडेट कर सकूं।

कोई विचार, या क्या मुझे अपने व्यूमोडेल में 1-तत्व संग्रह बनाना चाहिए और उसमें बाध्य होना चाहिए?

संपादित करें: यह वही है जो मैंने किया है, हालांकि नीचे दिया गया जवाब भी एक समाधान है। मैं अपने DataTemplates से काफी जुड़ा हुआ हूं, इसलिए इस तरह कुछ ऐसा करने में सहज महसूस नहीं हुआ जो किसी अन्य एक्सएएमएल फ़ाइल में धकेल गया।

XAML:

 <ItemsControl 
      DataContext="{Binding}" 
      ItemsSource="{Binding Session_ListSource}" 
      ItemTemplate="{StaticResource SessionHeaderDataTemplate}" /> 

ViewModel:

private Session m_Session; 
    public Session Session 
    { 
     get { return m_Session; } 
     set 
     { 
      if (m_Session != value) 
      { 
       m_Session = value; 
       OnPropertyChanged("Session"); 

       // Added these two lines 
       Session_ListSource.Clear(); 
       Session_ListSource.Add(this.Session); 
      } 
     } 
    } 

    // Added this property. 
    private ObservableCollection<Session> m_Session_ListSource = new ObservableCollection<Session>(); 
    public ObservableCollection<Session> Session_ListSource 
    { 
     get { return m_Session_ListSource; } 
     set 
     { 
      if (m_Session_ListSource != value) 
      { 
       m_Session_ListSource = value; 
       OnPropertyChanged("Session_ListSource"); 
      } 
     } 
    } 

उत्तर

29

किसी अन्य उपयोगकर्ता नियंत्रण बनाने के बजाय किसी भी कोड के पीछे सरल विचारों के लिए अपने डेटामैप्लेट्स के साथ चिपकाएं। एक आइटम के लिए अपने डेटा टेम्पलेट को प्रदर्शित करने के लिए ContentControl का उपयोग करें।

<ContentControl 
     ContentTemplate="{StaticResource SessionHeaderDataTemplate}" 
     Content="{Binding Path=Session}" /> 
+2

बिल्कुल मैं क्या कर रहा था! – geofftnz

+0

उस बारे में नहीं सोचा था, अच्छा – mattmanser

+0

उपयोगकर्ता नियंत्रण बनाने के साथ सहमत नहीं है। यह काम करता है, और UserControl से बहुत आसान है। –

1

आप एक ItemsControl उपयोग करने के लिए है कि, बस एक कस्टम उपयोगकर्ता नियंत्रण बनाने ऐसा करने के लिए, तो वह करने के लिए बाध्य है, उदा की जरूरत नहीं है

<TestProject:myControl DataContext="{Binding Session}" /> 

कस्टम नियंत्रण में यह स्वयं की xaml फ़ाइल हो सकती है, हालांकि यह आप इसे देखना चाहते हैं।

+0

मैं क्योंकि यह समस्या का समाधान नहीं है जवाब के रूप में चिह्नित करने के लिए जा रहा हूँ, लेकिन मैं क्योंकि मैं एक ही स्थान पर अपने सभी पुन: प्रयोज्य डेटा टेम्पलेट्स रखने पसंद करते हैं करने के लिए बाध्य करने के लिए एक 1-तत्व संग्रह बनाने समाप्त हो गया। – geofftnz