2016-07-17 15 views
0

Ich versuche, gruppierte Listbox-Elemente in einer Listbox zu umbrechen. Ich verwende ein Stackpanel innerhalb eines Wrappers, um dies zu erreichen, aber das Problem ist, dass das Stackpanel in der Listbox ausgewählt wird, was Probleme verursacht. Hier ist ein Beispiel für das Problem:Wrap gruppierte ListBoxItems (Stackpanel Issues)

Example of issue
Hier ist mein Code, vereinfacht:

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel ItemWidth="120" Width="400" IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <StackPanel> 
     <ListBoxItem Style="{StaticResource label}">Header 1</ListBoxItem> 
     <ListBoxItem>Item 1</ListBoxItem> 
     <ListBoxItem>Item 2</ListBoxItem> 
     <ListBoxItem>Item 3</ListBoxItem> 
     <ListBoxItem>Item 4</ListBoxItem> 
    </StackPanel> 
    <StackPanel> 
     <ListBoxItem Style="{StaticResource label}">Header 2</ListBoxItem> 
     <ListBoxItem>Item 1</ListBoxItem> 
     <ListBoxItem>Item 2</ListBoxItem> 
     <ListBoxItem>Item 3</ListBoxItem> 
     <ListBoxItem>Item 4</ListBoxItem> 
    </StackPanel> 
</ListBox> 

Was kann ich tun, um dieses zu lösen?

Danke!

+0

Did yo Versuchen Sie es mit einem Gitter? – ViVi

Antwort

0

Wenn ich Ihr Problem richtig verstehe, habe ich eine funktionierende Lösung.

Die Art, wie Sie entworfen haben, ist falsch.

Bitte sehen Sie meinen Code und lassen Sie mich wissen, wenn dies das ist, was Sie wollten.

<ListBox SelectionMode="Multiple" x:Name="ListBox1" ItemsSource="{Binding ListToBind}" > 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel ItemWidth="120" Width="400" IsItemsHost="True" /> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 

     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding Header}"></TextBlock> 
        <ListBox ItemsSource="{Binding Collection}"> 

        </ListBox> 
       </StackPanel> 

      </DataTemplate> 
     </ListBox.ItemTemplate> 

    </ListBox> 



This is my UI and here is connecting Data model. I set the datacontext in code behind and fill up a model. 

-Code sieht hinter wie diese

 public MainWindow() 
    { 
     InitializeComponent(); 
     ListToBind = new ObservableCollection<DataModel> 
     { 
      new DataModel { Header = "header 1", 
       Collection = new List<string>{"Item 1","Item 2", "Item 3"}}, 
      new DataModel { Header = "header 2", 
       Collection = new List<string>{"Item 1","Item 2", "Item 3"}}, 
      new DataModel { Header = "header 3", 
       Collection = new List<string>{"Item 1","Item 2", "Item 3"}}, 

     }; 
     this.DataContext = this; 
     var para1 = new Form1(); 
     var check = ListBox1; 
    } 

Und hier ist das Datenmodell

public class DataModel 
{ 


    public string Header { get; set; } 

    public List<string> Collection { get; set; } 


} 

Und das ist, wie es aussieht, nach dem Laufen

enter image description here

+0

Das könnte funktionieren, und ich werde es testen müssen. Mein Ziel ist es jedoch, nur eine fortlaufende Liste für eine Listbox zu haben, so dass der Benutzer gezwungen ist, nur eine Auswahl auszuwählen. Ich weiß, dass ich Code hinzufügen könnte, um die anderen Listen abzuwählen, aber es muss einen anderen Weg geben, um das, was ich oben habe, zu erreichen, ohne dass mehrere Listen erstellt werden müssen. – Mike

+0

Also sagen Sie, dass Sie die gesamte Liste oder nur ein Element aus der gesamten Liste auswählen möchten. Zum Beispiel sollte es Ihnen erlaubt sein, Kopfzeile 2 und Kopfzeile 2 Punkt 2 auszuwählen. Wenn Sie einen anderen Punkt aus Kopfzeile 3 auswählen, sollte Kopfzeile 2 deaktiviert sein. Wollen Sie das umsetzen? –

+0

Ihr Szenario ist, was ich suche. Ich wähle einen Artikel aus dem Header 2. Wenn ich einen Artikel aus dem Header 3 auswähle, wird der Artikel aus dem Header 2 deaktiviert. Ich nehme an, ich könnte die Abwahl programmieren, aber dann kann ich genauso viele verschiedene Listen erstellen, im Gegensatz zu meiner Liste, die ich momentan habe. Ich war nur neugierig, ob es eine Möglichkeit gibt, von links nach rechts zu "gruppieren", indem man eine Liste verwendet. – Mike