2017-06-13 27 views
2

我搜索过一段时间,但我觉得每个人也有类似的问题是使用数据库或需要其他特殊情况。如果我只是误解,然后我为重复的问题表示歉意。DataGrid.ItemsSource返回旧的数据,当我需要编辑的版本

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

一切完美的作品,并在DataGrid正确显示的一切。不过,我打算允许用户编辑数据在每个单元随心所欲,按“保存”按钮,保存数据返回到一个列表<(输入)>。不幸的是,旧的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"); 
} 

回答

2

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

使用一个类来保存您的数据:

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

我没想到一类将使所有的差异。这正是我所需要的,这是一个简单的解决方案!看来我需要重新评估我的C#语言的理解。谢谢! –

相关问题