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
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>
Hallo Omit,
leider funktioniert es noch nicht. Es wäre super, wenn du mir vielleicht mal den Code posten könntest.
Mfg
Mini25
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
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.