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; } }}