Laden...

Hierarchische ComboBox

Erstellt von Mini25 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.198 Views
M
Mini25 Themenstarter:in
45 Beiträge seit 2010
vor 12 Jahren
Hierarchische ComboBox

Hallo Leute,

wie kann ich Daten in einer ComboBox hierarchisch darstellen?

Ich habe eine Liste mit Objekten und jedes Objekt hat wiederrum eine Liste mit Objekten des selben Typs.

Sprich wie schaffe ich folgende Darstellung:

Objekt1.Name
Objekt1ObjListe.1Objekt.Name
Objekt1ObjListe.2Objekt.Name
Objekt2.Name
Objekt2ObjListe.1Objekt.Name
.
.
.

In einer Treeview habe ich es mit HierarchicalDataTemplates gemacht. Jedoch funktioniert dies bei der ComboBox nicht. Es werden nur die Hauptelemente angezeigt.
Sprich:

Objekt1.Name
Objekt2.Name

Vielen Dank für die Hilfe

Lg
Mini25

143 Beiträge seit 2008
vor 12 Jahren

Leider nur kurz. Sorry. Hab das mal gemacht und da hab ich das Controltemplate angepasst. Ganz genau kann ich dir das jetzt nicht mehr sagen. Hab damals das Stackpanel durch Treeview ersetzt. Hab da mit MVVM gearbeitet und die Bindings gesetzt. SelectedItem hab ich dann an eine ViewModel-Property gebunden.

Wenn du, wenn ich wieder an meinem Hauptrechner bin immer noch Probleme hast, dann schau ich mal in meinen alten Code. (Entweder morgen Abend oder Wochenende)

Vielleicht hat jemand noch bessere Hilfe.

ControlTemplate findest hier was:

http://msdn.microsoft.com/de-de/library/ms752094.aspx

Das sind die wichtigen Teile:


...
          <ContentPresenter x:Name="ContentSite"
                            IsHitTestVisible="False"
                            Content="{TemplateBinding SelectionBoxItem}"
                            ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                            ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                            Margin="3,3,23,3"
                            VerticalAlignment="Stretch"
                            HorizontalAlignment="Left">
          </ContentPresenter>
          <TextBox x:Name="PART_EditableTextBox"
                   Style="{x:Null}"
                   Template="{StaticResource ComboBoxTextBox}"
                   HorizontalAlignment="Left"
                   VerticalAlignment="Bottom"
                   Margin="3,3,23,3"
                   Focusable="True"
                   Background="Transparent"
                   Visibility="Hidden"
                   IsReadOnly="{TemplateBinding IsReadOnly}" />
....
              <ScrollViewer Margin="4,6,4,6"
                            SnapsToDevicePixels="True">
                <StackPanel IsItemsHost="True"
                            KeyboardNavigation.DirectionalNavigation="Contained" />
              </ScrollViewer>



M
Mini25 Themenstarter:in
45 Beiträge seit 2010
vor 12 Jahren

Hallo Omit,

leider funktioniert es noch nicht. Es wäre super, wenn du mir vielleicht mal den Code posten könntest.

Mfg
Mini25

U
1.578 Beiträge seit 2009
vor 12 Jahren

Suchst du sowas => TreeComboBox?

Code ist hier: TreeComboBox on GitHub

M
Mini25 Themenstarter:in
45 Beiträge seit 2010
vor 12 Jahren

Hallo David W,

eigentlich möchte ich ein Kombinationsfeld bei dem einfach die SubItems eingerückt sind. Allerdings sollte die Einrückung nur beim Anzeigen der Items angezeigt werden. Wurde ein Subitem ausgewählt sollte die Einrückung in der Auswahl nicht mehr angezeigt werden.

Wie löse ich das am besten?

Mfg
Mini25

U
1.578 Beiträge seit 2009
vor 12 Jahren

Du kannst zwei Template definieren, einmal ein Template für den geschlossen zustand wo es normal angezeigt wird.
Und dann ein Template für den geöffneten zustand, da packst du dir noch ein Dummy Control rein welches eine voegegebene Breite nimmt (Festgelegt mittels eines IValueConverters).

Zwischen die beiden Template wählst du dann mitteles eines DataTemplateSelectors.
Ein Beispiel dieses Selectors findest du in den Beitrag von mir hier: ComboBox - nicht alles aus DropDown übernehmen (ungefähr in der Mitte).

//Dazu
Falls du weiterhin ein echten Baum haben willst ist solch ein Control wie ich dir schon Zeigte das richtige für dich, da sind die Items in einem Baum angezeigt aber das ausgewählte Item nicht mehr, da kannste das Template auch selber bestimmen.