我按以下方式执行DataBinding
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中我对Value
的{{1}}进行了一些更改,之后在另一段代码中我尝试从Editors[0]
元素获取值并发现它没有已更改,即使我使用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>}
....
它可能是什么?对任何想法都会感激不尽。
答案 0 :(得分:1)
我不确定我是否正确关注,但我相信答案是,当您枚举字典时,您获得的KeyValuePair(KVP)对象是在枚举时创建的。再次枚举它,您将获得一组不同的对象。这是因为KVP是一种值类型。
要更改KVP引用的内容,您必须返回原始的Dictionary对象。数据绑定不会这样做。