c# - Winforms Bindingsource Datamember 属性界面什么都不显示

标签 c# .net winforms

Setup:

  • Model 具有一个类型为接口(interface)的属性。
  • 创建实例并将其添加到 winforms 绑定(bind)源
  • 将文本框添加到 winforms 并将文本值配置为使用具有属性的绑定(bind)源作为数据成员

Model

public class Model
{
    public ICustomer Customer { get; set; }
}

public class Customer : ICustomer
{
    public string Name { get; set; }
    public override string ToString()
    {
        return Name;
    }
}

public interface ICustomer
{
    string Name { get; set; }
}

Binding

this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.bsModel, "Customer", true));

Problem

当我运行这段代码时,文本框保持为空(而不是显示客户的姓名)。

但是当我将 Model 中的 Customer 属性的类型更改为具体的 Customer 类型时,它确实显示了它。

我在 MSDN 上找不到任何原因,这是为什么?有什么想法吗?

(最好不要像将 toString 值存储到另一个属性中这样的解决方法,有一个框架可以执行此绑定(bind),我不想侵入)

最佳答案

可能您应该指定应该绑定(bind)到 TextBox 的 Text 属性的属性

this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding
              ("Text", this.bsModel, "Customer.Name", true));

如果您删除接口(interface) ICustomer 并直接使用具体类 Customer,那么绑定(bind)代码将使用您在具体类中覆盖的一直存在的 ToString() 方法,从而设置文本框。
例如,尝试更改 ToString 以返回 Surname 属性

关于c# - Winforms Bindingsource Datamember 属性界面什么都不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34515184/

相关文章:

.net - 给定 XElement,如何在给定 XPath 的情况下检索对另一个相关 XElement/Xattribute 的引用?

c# - 如何在 .net 表单应用程序的消息框中创建自定义按钮?

C# 如何暂停我的程序并等待来自 WinForm 的键盘输入

c# - ReportViewer - Windows XP 上的 System.IO.FileNotFoundException

c# - 为 kendo ui Combobox 触发了两次更改事件

c# - 打开 mysql 连接时出现 System.TypeInitializationException 错误

c# - Windows 窗体/WPF 太大,我该如何拆分?

c# - 更改 WebResource.axd URL

c# - GridView 在显示模式下显示,但不在浏览器中显示 ASP.NET C#

c# - 如何为图表控件的 x 轴提供自定义标签?