2017-06-13 8 views
2

Ich habe eine Weile gesucht, aber ich habe das Gefühl, dass jeder, der ähnliche Fragen hat, mit Datenbanken arbeitet oder andere besondere Umstände benötigt. Wenn ich nur Missverständnisse habe, entschuldige ich mich für die Wiederholungsfrage.DataGrid.ItemsSource gibt alte Daten zurück, wenn ich die bearbeitete Version brauche

Ich habe eine DataGrid.ItemsSource, die ich gleich gesetzt habe List < (Entry)> -() wo Eintrag eine Struktur von drei Strings ist.

Alles funktioniert einwandfrei und das DataGrid zeigt alles korrekt an. Ich wollte jedoch dem Benutzer erlauben, die Daten in jeder Zelle nach Belieben zu bearbeiten und einen "Speichern" -Button zu drücken, um diese Daten wieder in eine Liste < (Entry)> zu speichern. Leider scheint die alte ItemsSource immer noch da zu sein.

So ... Wie greife ich auf die neuen Daten zu? Hier ist mein Code. EntryGrid ist mein DataGrid.

public struct Entry 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Description { get; set; } 
} 

private void createTable() 
{ 
    List<Entry> data = new List<Entry>(); 
    data.Add(new Entry() { Description = "StackOverflow", Username = "TieRein", Password = "LetMeIn" }); 
    data.Add(new Entry() { Description = "AnotherStackOverflow", Username = "NewTieRein", Password = "DontLetMeIn" }); 
    EntryGrid.ItemsSource = data; 
} 

private void SaveFile(bool confirmation) 
{ 
    EntryGrid.Items.Refresh(); 
    List<Entry> Save = new List<Entry>(); 
    Save = (List<Entry>)EntryGrid.ItemsSource; 
    string filename = "../../../" + m_profile; 
    using (var file = File.OpenWrite(filename)) 
    { 
     var writer = new BinaryFormatter(); 
     writer.Serialize(file, Save);   
    } 

    if (confirmation) 
     MessageBox.Show("Account Saved"); 
} 

Antwort

2

Sie verwenden eine Liste von Strukturen für Ihre Daten und sie werden nach Wert übergeben. Wenn Ihre Bindung die Daten aktualisiert, ändert sie nicht Ihre ursprüngliche Struktur, sondern irgendeine Kopie der Struktur irgendwo in der Bindungsimplementierung.

eine Klasse Verwenden Sie Ihre Daten zu halten:

public class Entry 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
    public string Description { get; set; } 
} 
+1

ich keine Ahnung hatte eine Klasse den Unterschied machen würde. Das ist genau das, was ich brauchte und so einfach zu reparieren! Sieht so aus, als müsste ich mein Verständnis der C# -Sprache neu bewerten. Vielen Dank! –

Verwandte Themen