2011-04-08 4 views
0

Salut j'utilise framework d'entité comme mapper, j'ai dropDownList et je veux configurer dans le code behinde DataTextField à une certaine propriété de ma classe, mais je ne veux pas le faire statique avec "someProperty "cos s'il y aura changement de domaine dans mon modèle, cet endroit me trow exception. Comment puis-je le faire, que si le nom de la propriété va changer, ici la liaison pointera sur la propriété modifiée?Liaison dynamique à la propriété

je l'ai trouvé bien meilleure solution:

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

puis:

GetPropertyName((SampleClass) => r.SampleProperty) 

donc ce n'est pas chaîne statique, mais je ne suis toujours pas heureux cos quand je change le dépôt dans le modèle d'entité, ici j'ai une erreur, est-ce possbile qu'avec des changements dans le modèle, cette liaison changera aussi?

+0

Non, ce n'est pas possible. Lorsque votre modèle change, vous devez mettre à jour votre code pour utiliser le nouveau nom de propriété, etc. btw votre solution est vraiment très agréable d'éliminer la nécessité d'avoir une chaîne codée en dur :) –

Répondre

0

Nous cartographions les objets métier à des objets anonymes avant databinding, comme ceci:

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

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

S'il y a un changement dans le modèle, par exemple BusinessProperty1 est renommé en AnotherBusinessProperty1, vous obtiendrez une erreur de compilation, et c'était exactement le but.

Questions connexes