数据绑定到嵌套属性 - 无法绑定属性或列(Winforms)

时间:2015-11-18 20:18:28

标签: c# .net winforms data-binding .net-4.0

我们正在使用Windows Forms运行.NET 4.0应用程序。应用程序对两种不同类型的对象使用单个表单。

namespace NetIssue
{
    public partial class Form1 : Form
    {
        B myObj;
        public Form1()
        {
            InitializeComponent();

            myObj = new B();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.DataBindings.Add(new Binding("Text", myObj, "c.Message"));
        }
    }

    public class Comment {
        public int ID { get; set; }
        public string Message { get; set; }

        public Comment(string msg)
        {
            Message = msg;
        }
    }

    public class A {
        string MyName = "";
    }

    public class B : A {
        public Comment c { get; set; }

        public B()
        {
            c = new Comment("test");
        }
    }
}

当在.NET 4.0中运行上述绑定时,我们会收到错误

  

发生错误:无法绑定到属性或列上的消息   数据源。参数名称:dataMember

但是,如果我们安装.NET 4.5,这个错误就会消失。

这是.NET 4.0的限制,.NET 4.0中的错误,还是其他的事情?

2 个答案:

答案 0 :(得分:2)

您可以使用以下任一选项:

B myObj = new B();
textBox1.DataBindings.Add(new Binding("Text", ((B)myObj).c, "Message"));

var bs = new BindingSource(myObj, null);
textBox1.DataBindings.Add("Text", bs, "c.Message");

textBox1.DataBindings.Add("Text", new B[] { myObj }, "c.Message");

答案 1 :(得分:2)

短篇小说:Windows窗体数据绑定不支持属性路径,这就是您收到错误的原因。

嗯,这就是我今天想到的。但是尝试你的代码我很惊讶它确实适用于.NET 4.5机器!所以看起来MS在某些方面补充说 - 说实话,不知道什么时候。但它现在在那里!无论如何,如果需要考虑向后兼容性,那么应该避免使用该功能(虽然这很可惜)。