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
ListBox - ItemTemplate - binding
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 186

Themenstarter:

ListBox - ItemTemplate - binding

beantworten | zitieren | melden

Hallo leute,

ich habe die ItemSource einer ListBox an eine ObersavableCollection gebunden und ein Itemtemplate festgelegt um die Darstellung der items zu beschreiben.
Das sieht wie folgt aus:
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" HorizontalAlignment="Stretch" VerticalAlignment="Top" ItemsSource="{Binding Users}" Height="253">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel  />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Button Margin="5" Template="{DynamicResource BlackButton}" Foreground="White">
                        <Grid>
                            <Label HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="22" Content="{Binding User.Login}" />
                            <Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="11,27,0,0" Content="{Binding Contact.LastName}" />
                        </Grid>
                    </Button>

                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Die ObservableCollection enthält objekte des typs "CompleteUserData"
CompleteUserData wiederum hat ein User und ein Contact Objekt in den sich dann die Relavanten daten befinden.
Wie man bei den beiden Labels sieht binde ich auch auf diese objekte
<Label HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="22" Content="{Binding User.Login}" />
<Label HorizontalAlignment="Left" VerticalAlignment="Top" Margin="11,27,0,0" Content="{Binding Contact.LastName}" />

Das Problem ist jetzt das, dass binding zu Contact nicht funktioniert. Also das 2te Label bleibt leer.
Das erste allerdings, welches User.Login bindet funktioniert!

Weiss einer woran das liegen könnte?
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 426

beantworten | zitieren | melden

Hallo,

ohne die genaue Datenstruktur zu kennen müsste ich raten.
Evtl. ein Tippfehler: "LastName" statt "Lastname"?
Oder aber das Objekt für "Contact" ist null.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi Coooder,

Binding-Fehler werden während der Laufzeit im Ausgabefenster angezeigt. Das sollte dir weiterhelfen. Ansonsten kannst du einen Debug-Converter verwenden (mal im Forum danach suchen).

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 186

Themenstarter:

beantworten | zitieren | melden

Danke für eure schnellen antowrten!

Tatsächlich steht im Ausgabefenster was zu einem Binding fehler!
Fehler
BindingExpression path error: 'LastName' property not found on 'object' ''ContactInfo'

Ich versteh nur nicht wie das sein kann. ContactInfo klasse hat definitiv eine LastName property!

Ich hab mal durchgetestet ... wenn ich auf Contact.ID binde geht es! Dann Schreibt er die GUID in das Label ... andere Propertys aber nicht.
private Nachricht | Beiträge des Benutzers
Sarc
myCSharp.de - Member



Dabei seit:
Beiträge: 426

beantworten | zitieren | melden

Ohne den restlichen Code zu kennen ist es schwer zu antworten.
Versuch doch noch ein detaillierteres Debugging, um den Fehler einzugrenzen.
Z.B. das TraceLevel hochsetzen, siehe: http://www.wpf-tutorial.com/data-binding/debugging/
private Nachricht | Beiträge des Benutzers
Coooder
myCSharp.de - Member



Dabei seit:
Beiträge: 186

Themenstarter:

beantworten | zitieren | melden

Sooo ich glaub ich hab das Problem gefunden

LastName und so sind zwar vorhanden aber als normale public variable und nicht als property!
Die Klassen liegen in einer dll, deswegen is mir das erst nicht aufgefallen

Ich kanns heute nich mehrt Testen aber ich geh stark davon aus, das es daran liegt
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Du hast also noch nichtmal in den Code geschaut, bevor du das hier geschrieben hast:
Zitat von Coooder
ContactInfo klasse hat definitiv eine LastName property!

Du kannst auch mit dem Reflector in die DLL reinschauen. Aber nicht reinschauen, und dann schreiben, definitiv gibt es die Eigenschaft, ist ziemlich dreist. Denn damit schiebst du deine Arbeit einfach auf das Forum ab, ohne die geringste Eigeninitiative.

Die Fehlermeldung und die Doku sagen jedenfalls sehr eindeutig, daß Datenbindung nur für öffentliche Eigenschaften anwendbar ist.

Bitte beachte zukünftig unseren [Hinweis] Wie poste ich richtig?, besonders Punkt 4.2, 5 und 8.

Christian
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers