Winforms DataBinding仅以一种方式工作

时间:2012-11-28 13:10:41

标签: c# .net winforms data-binding

我按以下方式执行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>}
            ....

它可能是什么?对任何想法都会感激不尽。

1 个答案:

答案 0 :(得分:1)

我不确定我是否正确关注,但我相信答案是,当您枚举字典时,您获得的KeyValuePair(KVP)对象是在枚举时创建的。再次枚举它,您将获得一组不同的对象。这是因为KVP是一种值类型。

要更改KVP引用的内容,您必须返回原始的Dictionary对象。数据绑定不会这样做。