Повторное использование PropertyPath заманчиво, поскольку оно поддерживает обход вложенных свойств, когда вы указываете и индексируете. Вы могли бы написать подобную функциональность самостоятельно, я сам в прошлом, но это включает в себя полусложный анализ текста и много работы по рефлексии.
Как отмечает Эндрю, вы можете просто повторно использовать PropertyPath из WPF. Я предполагаю, что вы просто хотите оценить этот путь относительно объекта, который у вас есть, и в этом случае код немного вовлечен. Для оценки PropertyPath его следует использовать в привязке к объекту DependencyObject. Чтобы продемонстрировать это, я просто создал простой объект DependencyObject с именем BindingEvaluator, который имеет один объект DependencyProperty. Затем происходит настоящее волшебство, вызывая BindingOperations.SetBinding, который применяет привязку, чтобы мы могли прочитать оцененное значение.
var path = new PropertyPath("FullName.FirstName");
var binding = new Binding();
binding.Source = new Person { FullName = new FullName { FirstName = "David"}}; // Just an example object similar to your question
binding.Path = path;
binding.Mode = BindingMode.TwoWay;
var evaluator = new BindingEvaluator();
BindingOperations.SetBinding(evaluator, BindingEvaluator.TargetProperty, binding);
var value = evaluator.Target;
// value will now be set to "David"
public class BindingEvaluator : DependencyObject
{
public static readonly DependencyProperty TargetProperty =
DependencyProperty.Register(
"Target",
typeof (object),
typeof (BindingEvaluator));
public object Target
{
get { return GetValue(TargetProperty); }
set { SetValue(TargetProperty, value); }
}
}
Если вы хотите расширить это, вы можете подключить события PropertyChanged для поддержки чтения значений, которые изменяются. Надеюсь, это поможет!