2010-06-09 8 views
26

मेरे पास एक WPF DataGridObservableCollection से जुड़ा हुआ है। मेरे संग्रह में प्रत्येक आइटम में संपत्ति है जो List<someObject> है। मेरी पंक्ति विवरण फलक में, मैं इस संग्रह में प्रत्येक आइटम के लिए स्वरूपित टेक्स्ट ब्लॉक लिखना चाहता हूं। अंतिम परिणाम कुछ के बराबर होगा:डब्ल्यूपीएफ पुनरावर्तक (जैसे) संग्रह स्रोत के लिए नियंत्रण?

<TextBlock Style="{StaticResource NBBOTextBlockStyle}" HorizontalAlignment="Right"> 
<TextBlock.Inlines> 
    <Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Name}" /> 
    <Run FontWeight="Bold" Text="{Binding Path=Exchanges[0].Price}" /> 
    <LineBreak /> 
    <Run Foreground="LightGray" Text="{Binding Path=Exchanges[0].Quantity}" /> 
</TextBlock.Inlines> 
</TextBlock> 
<TextBlock Style="{StaticResource NBBOTextBlockStyle}"> 
<TextBlock.Inlines> 
    <Run FontWeight="Bold" Text="{Binding Path=Exchanges[1].Name}" /> 
    <Run FontWeight="Bold" Text="{Binding Path=Exchanges[1].Price}" /> 
    <LineBreak /> 
    <Run Foreground="LightGray" Text="{Binding Path=Exchanges[1].Quantity}" /> 
</TextBlock.Inlines> 
</TextBlock> 

और 0-एन बार पर।

मैं इसके लिए ItemsControl का उपयोग कर की कोशिश की है:

<ItemsControl ItemsSource="{Binding Path=Exchanges}"> 
    <DataTemplate> 
     <Label>test</Label> 
    </DataTemplate> 
</ItemsControl> 

हालांकि, यह केवल, अधिक स्थिर स्रोतों के लिए किया जाना है के रूप में यह निम्न अपवाद फेंकता (संग्रह निर्माण के बाद बदला नहीं गया है) प्रकट होता है:

आइटम नियंत्रण ऑपरेशन मान्य नहीं है जबकि आइटमसोर्स उपयोग में है। आइटम्स कंट्रोल के साथ तत्वों को एक्सेस और संशोधित करें। इसके बजाय *

क्या यह हासिल करने का कोई और तरीका है?

+0

ItemsControl ठीक होना चाहिए। आइटम्स कंट्रोल की आइटम प्रॉपर्टी का उपयोग करते समय आपको आमतौर पर यह त्रुटि मिलती है जबकि आपके आइटमसोर्स बाध्य होते हैं, क्या यह मामला हो सकता है? –

उत्तर

60

आप ItemsControl के अंदर <DataTemplate .../> निर्दिष्ट करने के द्वारा किया क्या आप ItemsControl जो Items है की संपत्ति डिफ़ॉल्ट DataTemplate के इस उदाहरण जोड़ा है। इसलिए आपके द्वारा प्राप्त अपवाद अपेक्षित परिणाम है: सबसे पहले आप ItemsSource निर्दिष्ट करते हैं, तो आप Items संशोधित करते हैं। इसके बजाय यदि आप ऐसा तरह अपने ItemsControl पर ItemTemplate संपत्ति को संशोधित करना चाहिए:

<ItemsControl ItemsSource="{Binding Path=Exchanges}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Label>test</Label> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

भयानक, धन्यवाद। वैसे भी मैं उस टेम्पलेट में वस्तुओं को क्षैतिज रूप से लंबवत रूप से ढेर कर सकता हूं? –

+1

आइटम्स पैनेल को एक स्टैपपैनेल के साथ आइटम्सपैनेल टेम्पलेट का उपयोग करने के लिए बदलें जिसमें ओरिएंटेशन = "क्षैतिज" है। –

+1

संपादित करें: जॉन द्वारा सुझाए गए नमूने 'ItemPanelTemplate' जोड़ा गया। यदि आप लाइन रैपिंग चाहते हैं, तो आप 'स्टैकपैनेल' के बजाय 'WrapPanel' का उपयोग कर सकते हैं। – repka

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