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
ComboBox mit Usercontrol als Item?
el_vital
myCSharp.de - Member



Dabei seit:
Beiträge: 366

Themenstarter:

ComboBox mit Usercontrol als Item?

beantworten | zitieren | melden

Gibt es eine Möglichkeit bei einer ComboBox in WPF UserControls als Items zu verwenden?
Wie zum Bespiel in diesem Bild:
Attachments
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Sicher, einfach das ItemTemplate entsprechend setzen.
private Nachricht | Beiträge des Benutzers
el_vital
myCSharp.de - Member



Dabei seit:
Beiträge: 366

Themenstarter:

beantworten | zitieren | melden

Hallo t0ms3n,
ich bekomme das leider nicht richtig zum Laufen.

Ich habe folgendes als ItemTemplate zugewiesen:


 <ComboBox.ItemTemplate>
                <DataTemplate>
                    <local:UserControlComboBoxElementWS/>
                </DataTemplate>
            </ComboBox.ItemTemplate>

und folgendes als ItemsSource="{Binding UserControlList}"

In dem C# Code:


        ObservableCollection<UserControlComboBoxElementWS> _UserControlList = new ObservableCollection<UserControlComboBoxElementWS>();
        public ObservableCollection<UserControlComboBoxElementWS> UserControlList
        {
            get
            {
                return _UserControlList;
            }
            set
            {
                _UserControlList = value;
            }
        }

Dann erzeuge ich 10 Objekte des UserControlComboBoxElementWS, fülle die mit Daten und füge die der Liste UserControlList hinzu. Es werden auch 10 Elemente in der Combobox angezeigt. Jedoch ohne Daten. Wenn ich solch ein UserControlComboBoxElementWS direkt auf der Oberfläche platziere und dem Control Daten zuweise, dann werden diese angezeigt.

Jedes Mal wenn ich die Combobox öffne, werden aus irgendeinem Grund 10 neue Objekte mit dem Aufruf des leeren Konstruktors erzeugt und dadurch sind die Elemente ohne Daten. Ich weiß leider nicht was ich falsch mache.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von el_vital am .
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

Tja, wenn du's nicht weißt, dann weiss es wohl niemand.
Weil niemand sonst kann ja deinen Code angucken.

Angebot: Mach du ein Testprojekt mit deinem Datenmodell und deiner Oberfläche soweit als möglich, zippe das - nur Sources, aber lauffähig!! - dann kann ich mal reingucken.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Hi,

dein Control erhält das entsprechende Item in der Liste als DataContext. Deine Liste sollte also nicht die UserControls dafür enthalten, sondern den nötigen DataContext bzw. das ViewModel.

Falls das Fragen aufwirfst, such hier im Forum z.B. mal nach MVVM.

Gruß
t0ms3n
private Nachricht | Beiträge des Benutzers
el_vital
myCSharp.de - Member



Dabei seit:
Beiträge: 366

Themenstarter:

beantworten | zitieren | melden

Zitat von t0ms3n
Hi,

dein Control erhält das entsprechende Item in der Liste als DataContext. Deine Liste sollte also nicht die UserControls dafür enthalten, sondern den nötigen DataContext bzw. das ViewModel.

Falls das Fragen aufwirfst, such hier im Forum z.B. mal nach MVVM.

Gruß
t0ms3n

Ich möchte schon, dass mein UserControl das zu darstellende Objekt ist. Also, dass die Liste die UserConstrolls enthält. Das was für Daten und in welcher Form in der ComboBox zu sehen sind, soll das jeweilige UserControl entscheiden. Jedes Element könnte also in der ComboBox anders aussehen, abhängig von dem Zustand und den Daten des UserControls.
private Nachricht | Beiträge des Benutzers
el_vital
myCSharp.de - Member



Dabei seit:
Beiträge: 366

Themenstarter:

beantworten | zitieren | melden

Das ist ein "Bug" der Combobox.
Es ist hier vom user128300 beschrieben: http://stackoverflow.com/questions/24008310/wpf-binding-in-combobox-with-usercontrol-list
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Wie Du vermutlich auch gesehen hast, steht in den Antworten jedoch das gleiche.

Das Binding schließt im übrigen nicht aus, dass die Controls unterschiedlich aussehen.
private Nachricht | Beiträge des Benutzers
el_vital
myCSharp.de - Member



Dabei seit:
Beiträge: 366

Themenstarter:

beantworten | zitieren | melden

Zitat von t0ms3n
Wie Du vermutlich auch gesehen hast, steht in den Antworten jedoch das gleiche.

Das Binding schließt im übrigen nicht aus, dass die Controls unterschiedlich aussehen.

Ja, ist richtig. Ich habe es jetzt wie von dir vorgeschlagen umgesetzt und es funktioniert. Auch das Aussehen wird über Binding von zum Beispiel einem Brush als Background gesteuert.

Das Einzige, was nicht geklappt hat ist das Binding von Methoden anstelle von Properties. Das wollte ich machen weil ich die Objekte serialisiere und ein Brush nicht serialisierbar ist. Ich hätte die Farbe gerne als Hex-String oder als Color serialisiert und in einer Methode GetColor() ein Brush zurück geliefert. Die Methode GetColor() konnte ich aber nicht "binden".
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von el_vital am .
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Sowas kannst Du z.B. über einen Converter lösen.
private Nachricht | Beiträge des Benutzers