当我需要编辑版本时,DataGrid.ItemsSource返回旧数据

时间:2017-06-13 05:51:59

标签: c# wpf datagrid

我已经搜索了一段时间,但我觉得每个有类似问题的人都在使用数据库或需要其他特殊情况。如果我只是误会,那么我为重复的问题道歉。

我有一个DataGrid.ItemsSource,我设置等于List<(Entry)> - ()其中entry是三个字符串的结构。

一切都很完美,DataGrid正确显示所有内容。但是,我打算允许用户根据需要编辑每个单元格中的数据,然后按"保存"按钮将该数据保存回List<(Entry)>。不幸的是,似乎旧的ItemsSource仍在那里。

那么......我如何访问新数据?这是我的代码。 EntryGrid是我的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");
}

1 个答案:

答案 0 :(得分:2)

您正在使用数据的结构列表,它们按值传递。当您的绑定更新数据时,它不会修改原始结构,而是在绑定实现中的某处修改结构的一些副本。

使用班级来保存您的数据:

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