c# - 数据绑定(bind)和重构代码

标签 c# .net data-binding visual-studio-2005

<分区>

我只是对将数据绑定(bind)到组合框(或我猜的其他可绑定(bind)对象)背后的一些编码实践感到好奇。 假设我已经创建了一个对象,我想将它们中的一堆添加到一个组合框中。 所以我创建了我的对象并赋予它一些属性。

public class ObjectForList
{
    public string ObjectName { get; set; }
    public int ObjectID { get; set; }
    public string SomeOtherProperty { get; set; }
    public ObjectForList()
    {
    }
}

然后我列出了它们并将其设置为我的组合框的来源

List<ObjectForList> myObjects= new List<ObjectForList> { ...bunch of ObjectForList objects...};

comboBox1.DataSource = myObjects;
comboBox1.DisplayMember = "ObjectName";
comboBox1.ValueMember = "ObjectID";

这就是我的理解,至少应该这样做。我在网上找到的所有解释中都看到了该实现。

但是让显示成员和值成员作为变量名称的硬编码字符串对我来说似乎不太容易。 如果几年后有人出现在 Visual Studio 中并重构 ObjectID 属性(成为“MyID”或其他东西),那么组合框绑定(bind)就会中断。而且它仍然会编译,所以在加载带有组合框的表单之前没有人会注意到。 同样,您将无法使用“查找引用”找到该属性的用途,因为它只是一个字符串。

人们对此有何看法?如何使用它并仍然保持代码的可维护性?

最佳答案

也可以在不传递成员类型的情况下完成,对吗?

  comboBox1.ValueMember = GetPropName(() => ObjectForListObject.ObjectID);

  public static string GetPropName<T>(Expression<Func<T>> propExp)
  {
     return (propExp.Body as MemberExpression).Member.Name;
  }

关于c# - 数据绑定(bind)和重构代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260774/

相关文章:

WPF 相对源行为

javascript - 在 angularjs 页面中显示范围内的元素

Android - 我可以以编程方式进行数据绑定(bind)吗? - 没有布局 XML

c# - 重命名命名空间后无效的 .resx 文件

c# - Task.WhenAll 返回列表而不是数组

c# - 使用 LINQ 从 xml 创建实体对象的最佳方法

c# - .Net 垃圾回收标记阶段和巨大的链表

c# - 模式匹配 blob 名称到具有输入绑定(bind)的函数变量

c# - 如何从文件夹中获取C#中的文件位置

.net - SAP 与 Xamarin 集成?