2012-11-28 56 views
1

我做數據綁定以下列方式的WinForms數據綁定工作的一種方式只

private List<MyEditor> Editors { get; set; } 
    private Dictionary<int,object> dictionary 

    private void SetEditors() 
    { 
     Editors.Clear(); 

     foreach (var element in dictionary) 
     { 
      var editor = MyFactory.GetEditor(); 
      editor.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged; 
      editor.DataBindings.Add("Value", element, "Value"); 

      //some code 

      Editors.Add(editor); 

     } 

     //some more code 
    } 

然後在GUI我做一些改變的Editors[0]Value,之後,在另一段代碼我嘗試從dictionary元獲得價值並發現它並沒有改變,即使我使用Editors[0].DataBindings["Value"].WriteValue()來確保數據被寫入dictionary

在調試器中,我可以看到下面的圖片:

Editors[0].DataBindings["Value"] {System.Windows.Forms.Binding} System.Windows.Forms.Binding 
      .... 
    DataSource {[0, oldValue]} object {System.Collections.Generic.KeyValuePair<int,object>} 
      .... 

Editors[0].Value "newValue" object {string} 

什麼可能呢?將感激任何想法。

回答

1

我不確定我遵循的是正確的,但我相信答案是,當你枚舉字典時,你得到的KeyValuePair(KVP)對象是在枚舉時創建的。再次枚舉它,你將得到一組不同的對象。這是因爲KVP是一種價值類型。

要改變KVP引用的內容,您必須返回到原始Dictionary對象。數據綁定不會那樣做。