1

我通过以下方式进行 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 中我对Valueof进行了一些更改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>}
            ....

尽管

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

会是什么呢?将不胜感激任何想法。

4

1 回答 1

1

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

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

于 2012-11-28T17:46:00.460 回答