【发布时间】:2015-11-18 20:18:27
【问题描述】:
我们正在使用 Windows 窗体运行 .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 中的错误,还是其他原因?
【问题讨论】:
-
您的类中没有任何属性 - 只有字段。
-
@IvanStoev 抱歉,实际代码使用属性。我相应地更新了示例代码。我无法复制/粘贴代码,因为它可能会泄露有关项目的信息。我现在正在构建一个完整的可重现样本。
-
另一件要提的事情(除了
extends,我猜是:) - 类B没有属性Message并且WF 不支持像WPF 这样的属性路径(你不能使用“c.Message”) -
@IvanStoev 这就是我尝试重写示例代码的结果。 (我不记得扩展关键字来自我脑海中的哪种语言。也许是 PHP。)我将代码更新为工作代码。如果您在安装了 .NET 4.5 的机器上运行代码,它就会工作。如果你在 .NET 4.0 机器上运行它,它会给你一个 .NET 错误。
-
我明白了。其实我今天从你那里学到了一些东西!我很确定不支持属性路径,但看起来他们稍后添加了该支持。所以可能这就是你所说的限制。要验证这一点,请在 .NET 4.0 机器上尝试
textBox1.DataBindings.Add(new Binding("Text", ((B)myObj).c, "Message"));(不幸的是我现在没有这样的可用)
标签: c# .net winforms data-binding .net-4.0