Evaluating an Object’s PropertyPath

Evaluating an Object’s PropertyPath

PropertyPaths are a very useful binding concept, and can be useful in other instances as well. However, .NET 3.5 does not support evaluating PropertyPaths against objects directly without using binding. Here’s a workaround:

public static class DataBinder{    private static readonly DependencyProperty DummyProperty =         DependencyProperty.RegisterAttached(        "Dummy",        typeof(Object),        typeof(DependencyObject),        new UIPropertyMetadata(null));    public static Object Eval(Object container, String expression)    {        Binding binding = new Binding(expression) { Source = container };        DependencyObject dummyDO = new DependencyObject();        BindingOperations.SetBinding(dummyDO, DummyProperty, binding);        return dummyDO.GetValue(DummyProperty);    }}

The following code provides a quick and easy way to test the workaround:

public partial class PropertyPathParserDemo : Window{    public PropertyPathParserDemo()    {        InitializeComponent();        Foo foo = new Foo() { Bar = new Bar() { Value = "Value" } };        this.Content = DataBinder.Eval(foo, "Bar.Value");    }    public class Foo    {        public Bar Bar        {            get;            set;        }    }    public class Bar    {        public string Value        {            get;            set;        }    }}


Share the Post: