Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Hierarchische ComboBox
Mini25
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

Hierarchische ComboBox

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Omit
myCSharp.de - Member

Avatar #avatar-2748.jpg


Dabei seit:
Beiträge: 146

beantworten | zitieren | melden

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>


private Nachricht | Beiträge des Benutzers
Mini25
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

beantworten | zitieren | melden

Hallo Omit,

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

Mfg
Mini25
private Nachricht | Beiträge des Benutzers
userid14268
myCSharp.de - Member



Dabei seit:
Beiträge: 1620

beantworten | zitieren | melden

Suchst du sowas => TreeComboBox?

Code ist hier: TreeComboBox on GitHub
private Nachricht | Beiträge des Benutzers
Mini25
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
userid14268
myCSharp.de - Member



Dabei seit:
Beiträge: 1620

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von userid14268 am .
private Nachricht | Beiträge des Benutzers