我们正在使用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中的错误,还是其他的事情?
答案 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在某些方面补充说 - 说实话,不知道什么时候。但它现在在那里!无论如何,如果需要考虑向后兼容性,那么应该避免使用该功能(虽然这很可惜)。