2017-06-13 28 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#語言的理解。謝謝! –

相關問題