2011-04-08 132 views
0

您好我正在使用實體框架作爲我的映射器,我有dropDownList,我想在代碼behinde DataTextField設置我的類的某些屬性,但我不想這樣做靜態與「someProperty 「因爲如果在我的模型中會改變場地,這個地方會讓我感到異常。我該怎麼做,如果屬性名稱會改變,這裏綁定將指向更改的屬性?動態綁定到屬性

我找到更好的解決方案:

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>> expression) 
    { 
     MemberExpression body = (MemberExpression)expression.Body; 
     return body.Member.Name; 
    } 

然後:

GetPropertyName((SampleClass) => r.SampleProperty) 

所以這不是靜態的字符串,但我還是不開心COS當我改變提交的實體模型,在這裏我有一個錯誤,這是possbile隨着模型的變化,這種綁定會改變嗎?

+0

不,這是不可能的。當你的模型發生變化時,你必須更新你的代碼來使用新的屬性名稱等。 btw你的解決方案真的很好,不需要硬編碼的字符串:) – 2011-04-08 13:57:27

回答

0

我們綁定之前映射業務對象匿名對象,像這樣:

var objectsToBindToDropdown = businessObjects.Select(o => new 
    { 
     SomeProperty1 = o.BusinessProperty1, 
     SomeProperty2 = o.BusinessProperty2 
    }); 

dropDownList.DataTextField = "SomeProperty1"; 
// TODO: bind the drop down list 

如果在模型中的變化,例如BusinessProperty1已重命名爲AnotherBusinessProperty1,您將收到編譯錯誤,而這正是目標。