Listview in .txt speichern/laden

  • WPF

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Listview in .txt speichern/laden

    Hallo,

    ich habe schon erfolgreich eine WinForms-Anwendung erstellt und wollte mich jetzt mal an WPF wagen.

    Ich habe eine Listview, welche mit TextBoxen und einem Button gefüllt wird. (mehrere Spalten und Zeilen)
    Meine Frage wäre jetzt, wie ich diese Listview in eine .txt Datei speichern kann und beim nächsten Start der Anwendung wieder laden kann.

    In WinForms hab ich folgenden Code (Visual Basic):

    zum speichern:

    VB.NET-Quellcode

    1. Public Sub lvw_WriteData(ByVal lvw As ListView, ByVal sDataFile As String)
    2. Dim sw As New StreamWriter(My.Settings.Speicherort & "\Sammlung.txt", False,
    3. System.Text.Encoding.Default)
    4. If SammlungListe.Items.Count = 0 Then
    5. Exit Sub
    6. Else
    7. Using sw
    8. For Each li As ListViewItem In SammlungListe.Items
    9. sw.Write(li.Text)
    10. sw.Write(" $ ")
    11. For i As Integer = 1 To li.SubItems.Count - 1
    12. sw.Write(li.SubItems(i).Text)
    13. sw.Write(" $ ")
    14. Next i
    15. sw.WriteLine()
    16. Next
    17. End Using
    18. End If
    19. End Sub


    zum laden:

    VB.NET-Quellcode

    1. Public Sub lvw_ReadData(ByVal lvw As ListView, ByVal sDataFile As String,
    2. Optional ByVal bAppend As Boolean = False)
    3. If Not bAppend Then SammlungListe.Items.Clear()
    4. If File.Exists(My.Settings.Speicherort & "\Sammlung.txt") = False Then
    5. File.Create(My.Settings.Speicherort & "\Sammlung.txt")
    6. Else
    7. Dim AnzahlSpalten As Integer = SammlungListe.Columns.Count
    8. Dim line As String = Nothing
    9. Dim sItem() As String
    10. Dim sLine As String
    11. Dim itemX As ListViewItem
    12. Dim i As Integer
    13. Dim SR As New StreamReader(My.Settings.Speicherort & "\Sammlung.txt", System.Text.Encoding.Default)
    14. With SammlungListe.Items
    15. Do Until SR.EndOfStream = True
    16. 'Linie einlesen und aufteilen
    17. sLine = SR.ReadLine()
    18. sItem = Split(sLine, " $ ")
    19. ' Falls die Anzahl Datenspalten nicht mit der
    20. ' Anzahl Spalten im ListView übereinstimmen, -> Array
    21. ' "zurechtrücken"
    22. If UBound(sItem) <> AnzahlSpalten Then
    23. ReDim Preserve sItem(AnzahlSpalten)
    24. End If
    25. itemX = SammlungListe.Items.Add(sItem(0), sItem(1))
    26. 'Subitems einlesen
    27. For i = 1 To AnzahlSpalten
    28. itemX.SubItems.Add(sItem(i))
    29. Next i
    30. Loop
    31. End With
    32. SR.Close()
    33. End If
    34. End Sub


    Button:

    VB.NET-Quellcode

    1. lvw_WriteData(SammlungListe, My.Settings.Speicherort & "\Sammlung.txt")


    In Form-Load:

    VB.NET-Quellcode

    1. lvw_ReadData(SammlungListe, My.Settings.Speicherort & "\Sammlung.txt")


    Doch wie kann ich das in WPF realisieren? :?:

    Danke im Voraus! :)
    zunächst mal: Visual Studio - Empfohlene Einstellungen
    Ist ganz wichtig, man sieht deinem Code an, dass du noch unter den was ich nenne "Deppen-Einstellungen" arbeitest - so kann nicht wirklich mit objektorientierter Programmierung in Kontakt kommen.

    Dann ist Wpf eine ganz annere Sprache, die aber gute Vb-Kenntnisse vorraussetzt, und insbesondere Kenntnis des Konzepts "Databinding".
    Imo, wenn du bisher nur eine Anwendung erstellt hast - naja - wird happig.
    Jedenfalls von deiner bisherigen Vorgehensweise, wo eine Schleife ListviewItems in ein Listview schaufelt, kannst du nichts übernehmen, jdfs. nicht, wenn du sauber nach dem MVVM-Pattern vorgehen willst.

    Also guck dir mal am besten alle Tuts im Wpf-Tut-Bereich durch.
    Viele davon haben auch Sample-Solutions beiliegen, und von denen wiederum einige sind dabei, die auch Daten speichern und laden.
    Also "BindingPicking" ist sehr wichtig, um eine wichtige Denkweise von Wpf kennenzulernen, und glaub im "DelegateConverter" ist auch ein Speicher-Modul enthalten.