C# 动态绑定到属性
嗨,我使用实体框架作为我的映射器,我有dropDownList,我想在代码behinde DataTextField中设置类的某个属性,但我不想使用someProperty静态设置,因为如果在我的模型中有更改字段,这个地方会出现异常。如果属性名称将发生更改,那么绑定将指向更改后的属性,我该怎么做 我找到了更好的解决方案:C# 动态绑定到属性,c#,entity-framework,C#,Entity Framework,嗨,我使用实体框架作为我的映射器,我有dropDownList,我想在代码behinde DataTextField中设置类的某个属性,但我不想使用someProperty静态设置,因为如果在我的模型中有更改字段,这个地方会出现异常。如果属性名称将发生更改,那么绑定将指向更改后的属性,我该怎么做 我找到了更好的解决方案: public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn&
public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>> expression)
{
MemberExpression body = (MemberExpression)expression.Body;
return body.Member.Name;
}
所以这不是静态字符串,但我仍然不高兴,因为当我更改实体模型中的字段时,这里有一个错误,这是否可能随着模型的更改,此绑定也会更改?我们在数据绑定之前将业务对象映射到匿名对象,如下所示:
var objectsToBindToDropdown = businessObjects.Select(o => new
{
SomeProperty1 = o.BusinessProperty1,
SomeProperty2 = o.BusinessProperty2
});
dropDownList.DataTextField = "SomeProperty1";
// TODO: bind the drop down list
如果模型发生更改,例如BusinessProperty1被重命名为另一个BusinessProperty1,您将得到编译错误,而这正是目标。否,这是不可能的。当您的模型更改时,您必须更新您的代码以使用新的属性名称等。顺便说一句,您的解决方案非常好,消除了硬编码字符串的需要:
var objectsToBindToDropdown = businessObjects.Select(o => new
{
SomeProperty1 = o.BusinessProperty1,
SomeProperty2 = o.BusinessProperty2
});
dropDownList.DataTextField = "SomeProperty1";
// TODO: bind the drop down list