KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a simple class with a property class Foo { string Title { get; set; } } I am trying to simplify data binding by calling a function like BindToText(titleTextBox, ()=>foo.Title ); which is declared like void BindToText<T>(Control control, Expression<Func<T>> property) { var mex = property.Body as MemberExpression; string name = mex.Member.Name; control.DataBindings.Add("Text", ??? , name); } so what do I put in ??? for the instance of my Foo class. How do I get a refernce to the calling foo instance from the lambda expression? edit: The instance should be there somewhere because I can call property.Compile() and create a delegate that uses the foo instance inside my BindToText function. So my question is if this can be done without adding a reference to the instance in the function parameters. I call upon Occum's Razor to yield the simplest solution. edit 2: What many have failed to notice is the closure that exists in accessing the instance of foo inside my function, if I compile the lambda. How come the compiler knows where to find the instance, and I don't? I insist that there has to be an answer, without having to pass an extra argument. Solution Thanks to VirtualBlackFox the solution is such: void BindText<T>(TextBoxBase text, Expression<Func<T>> property) { var mex = property.Body as MemberExpression; string name = mex.Member.Name; var fex = mex.Expression as MemberExpression; var cex = fex.Expression as ConstantExpression;
Tags (comma-separated)
Save Edits
Cancel