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?
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.
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
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.
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/
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
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