2010-07-28 10 views
55

पर बाइंड संग्रह मैं ऑब्जेक्ट्स का संग्रह लेना चाहता हूं और इसे स्टैकपैनल से बांधना चाहता हूं, इसलिए मूल रूप से अगर संग्रह में 4 तत्व होते हैं, तो स्टैक पैनल के अंदर 4 बटन उत्पन्न करना चाहिए।स्टैकपैनल

मैंने कोशिश की ... लेकिन मुझे यह सही दृष्टिकोण नहीं लगता है। मैंने अतीत में इस तरह के विचार करने के लिए डेटा टेम्पलेट का उपयोग किया .. अगर मैं गलत हूं तो कृपया मुझे सही करें।

यहाँ मेरी नकली मॉडल

public class MockModel 
{ 
    public ObservableCollection<MockNode> Nodes; 

    public MockModel() 
    { 
     Nodes = new ObservableCollection<MockNode>(); 
    } 
} 

public class MockNode 
{ 
    public MockNode() 
    { 
    } 

    private string itemname; 
    public string ItemName 
    { 
     get { return this.itemname; } 
     set { this.itemname = value; } 
    } 
} 

कोड में मैं इस तरह DataContext सेट ...

// Init Model 
MockModel myModel = new MockModel(); 

for (int i = 0; i < 4; i++) 
{ 
    MockNode mn = new MockNode(); 
    mn.ItemName = String.Format("Node {0}", i); 
    myModel.Nodes.Add(mn); 
} 
// Set DataContext for StackPanel 
Stack.DataContext = myModel.Nodes; 

और XAML है

<StackPanel x:Name="tStack"> 
    <ItemsControl ItemsSource="{Binding Nodes}"> 
     <ItemsControl.Template> 
     <ControlTemplate> 
      <Button Content="{Binding ItemName}"/> 
     </ControlTemplate> 
     </ItemsControl.Template> 
    </ItemsControl> 
</StackPanel> 

आईटी बांधता है लेकिन 4 बटनों के बजाय मुझे केवल एक बटन मिलता है ....

विचार?

उत्तर

114

ठीक है मैं यह पता लगा है ... का उपयोग करते हुए एक ItemsControl समस्या हल ...

<ItemsControl x:Name="tStack" Grid.Column="0"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <Button Content="{Binding ItemName}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+1

यह मैं सिर्फ क्या जरूरत थी। धन्यवाद। – Trevor

+0

यह हमेशा आवश्यक नहीं है, लेकिन कुछ और अनुकूलन के लिए आपको StackPanel पर "IsItemsHost" संपत्ति सेट करने की आवश्यकता होगी। – MatrixManAtYrService

+4

आप 'आइटमसोर्स' कहां सेट कर रहे हैं? क्या यह एक्सएएमएल ' 'में लपेटा गया है? – IAbstract

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