Hinzufügen von Items zu einem WPF Listview klappt noch nicht ganz

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Hinzufügen von Items zu einem WPF Listview klappt noch nicht ganz

    Hallo,

    ich versuche mit folgendem Code manuell Items zu einem Listview hinzuzufügen aber irgendwie klappt es noch nicht ganz :huh: .
    Hat jemand eine Idee wo der Fehler stecken könnte?

    Der XML Code:

    XML-Quellcode

    1. <ListView HorizontalAlignment="Stretch" Margin="0,0,0,0" VerticalAlignment="Stretch" Name="MovieList">
    2. <ListView.View>
    3. <GridView x:Name="GridViewMovies">
    4. <GridViewColumn Header="Title" Width="500" DisplayMemberBinding="{Binding TITLE}">
    5. </GridViewColumn>
    6. </GridView>
    7. </ListView.View>
    8. </ListView>


    Und hier der VB Code:

    VB.NET-Quellcode

    1. Public Class Movie
    2. Public TITLE As String
    3. End Class
    4. Partial Public Class ToDo
    5. Public Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    6. 'Dim i As Movie = New Movie With {.StrName = "Halllo"}
    7. MovieList.Items.Add(New Movie With {.TITLE = "Hallo"})
    8. End Sub
    9. End Class


    Habe mich versucht an folgendem zu orientieren:
    dotnetperls.com/listview-wpf

    Grüße und vielen Dank im Vorraus,
    1. Man fügt niemals Items der ListView direkt hinzu, binde lieber eine ObservableCollection(Of Movie) o.ä. an die ItemsSource-Property der ListView
    2. Was für ein Verhalten/Fehler tritt denn auf? Wird ein Eintrag in der ListView angezeigt, aber der TITLE nicht?

    lg ST
    | Keine Fragen per PN oder Skype.
    Wird der Code ausgeführt? (Haltepunkt drauf.)
    Und prüfe nach Zeile 8, ob sich die MovieList.Items-Auflistung verändert hat.
    Und welchen Typ erwartet die Add-Methode?
    Hast Du Option Strict On?

    Davon abgesehen solltest Du DataBinding nach dem MVVM-Schema verwenden. Denn wenn Du später mal alle vorhandenen Movie-Objekte durchlaufen willst, musst Du erst wieder ins View grabschen (um ErfinderDesRades zu zitieren) und wahrscheinlich casten.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Jojo0405 schrieb:

    zu 1.: Ich bin mir dessen durchaus bewusst.

    Nein, bist du offensichtlich nicht, sonst würdest du es nicht so machen.

    Jojo0405 schrieb:

    zu 2.: Ja genau, ein Eintrag ist vorhanden, aber eben der TITLE nicht.

    Scheint, als wenn Zeile 8 in deinem Code in folgender Reihenfolge ausgeführt wird:

    VB.NET-Quellcode

    1. Dim zwischenvariable As New Movie
    2. MovieList.Items.Add(zwischenvariable)
    3. zwischenvariable.TITLE = "Hallo"

    (Wenn du es als Property anstatt als field variable implementierst, scheint die Reihenfolge anders zu sein, ist aber nicht die Lösung des Problems, sondern nur ein Workaround)
    Und da du weder DependencyProperties hast noch INotifyPropertyChanged implementierst, weiß WPF nichts von der Änderung des Titels und aktualisiert die ListView entsprechend nicht.

    Außerdem solltest du deine Properties nicht ALLCAPS benennen.

    ~ST
    | Keine Fragen per PN oder Skype.

    Jojo0405 schrieb:

    Habe mich versucht an folgendem zu orientieren:
    dotnetperls.com/listview-wpf

    Das Tut ist Anti-MVVM - nimm doch lieber eines der VBP-Tuts.
    Nun gibts zum einfachen Binden einer Listview gar kein eigenes Tut (weil ist zu trivial), aber du kannst die Solution aus Das Codebehind unter Benutzung des MVVMs nehmen, und den gesamte Drag&Drop-Kram entfernen (insbesondere den Codebehind).

    Oder die vier Views (in Wpf) enthält auch super-einfache MVVM-Beispiele.