【问题标题】:Winforms DataBinding works one way onlyWinforms DataBinding 仅以一种方式工作
【发布时间】:2012-11-28 13:10:40
【问题描述】:

我通过以下方式进行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 中我对 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}

可能是什么?将不胜感激任何想法。

【问题讨论】:

    标签: c# .net winforms data-binding


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 2021-04-16
      • 2020-07-30
      • 2016-09-03
      相关资源
      最近更新 更多