Laden...

ListBox - ItemTemplate - binding

Erstellt von Coooder vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.900 Views
Thema geschlossen
C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren
ListBox - ItemTemplate - binding

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?

S
417 Beiträge seit 2008
vor 8 Jahren

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.

5.657 Beiträge seit 2006
vor 8 Jahren

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

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren

Danke für eure schnellen antowrten!

Tatsächlich steht im Ausgabefenster was zu einem Binding fehler!

Fehlermeldung:
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.

S
417 Beiträge seit 2008
vor 8 Jahren

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/

C
Coooder Themenstarter:in
180 Beiträge seit 2011
vor 8 Jahren

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

5.657 Beiträge seit 2006
vor 8 Jahren

Du hast also noch nichtmal in den Code geschaut, bevor du das hier geschrieben hast:

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

Thema geschlossen