C# WPF我应该如何计算属性路径?

C# WPF我应该如何计算属性路径?,c#,wpf,path,properties,C#,Wpf,Path,Properties,我正在编写一个自定义控件,并且有一个属性路径作为字符串(想想组合框。SelectedValuePath)。 代码中为任意对象计算此字符串的最佳方法是什么 很明显,我可以自己解析它,但这是一个黑客攻击,我希望路径能够支持所有组合框。SelectedValuePath可以(为了一致性) 结果(感谢Aran Mulholland): 我不确定这部电影的表现,但我现在不太在乎这部电影的表现 public class BindingEvaluator { #region Target Class

我正在编写一个自定义控件,并且有一个属性路径作为字符串(想想
组合框。SelectedValuePath
)。
代码中为任意对象计算此字符串的最佳方法是什么

很明显,我可以自己解析它,但这是一个黑客攻击,我希望路径能够支持所有
组合框。SelectedValuePath
可以(为了一致性)

结果(感谢Aran Mulholland):

我不确定这部电影的表现,但我现在不太在乎这部电影的表现

public class BindingEvaluator {
    #region Target Class

    private class Target : DependencyObject {
        public static readonly DependencyProperty ResultProperty = DependencyProperty.Register(
            "Result", typeof(IEnumerable), typeof(BindingEvaluator)
        );

        public object Result {
            get { return this.GetValue(ResultProperty); }
            set { this.SetValue(ResultProperty, value); }
        }
    }

    #endregion

    public object GetValue(object source, string propertyPath) {
        var target = new Target();
        BindingOperations.SetBinding(target, Target.ResultProperty, new Binding(propertyPath) {
            Source = source,
            Mode = BindingMode.OneTime
        });
        return target.Result;
    }
}

创建一个对象,该对象有一个object类型的依赖属性,将绑定设置为属性路径作为路径,任意对象作为源。绑定将执行,您可以看到属性路径末尾的内容(如果有)。这是我发现的用代码做这类事情的唯一方法。您可以编写一个可以遵循属性路径的递归反射引擎,但它已经完成了,我们在绑定时使用它。您需要五分钟来编写:)

我也使用它,在这种奇怪的情况下,我确实想知道它的性能,但是wpf到处都使用绑定,所以还有什么其他的呢……wpf可能有缓存,而当前形式的代码没有。至少在多个调用之间缓存绑定在理论上会更好,但我不太在意验证,除非我注意到速度变慢。:)需要注意的是,当Result属性的类型为object时,Target中dependencProperty的声明类型是IEnumerable吗?@dtm可能只是我的错误——发布了中间版本而不是final。然而那是很久以前的事了,我不记得了。如果我找到了这段代码,我会纠正这个问题,否则如果你测试了它,请告诉我你的发现;然而,令人惊讶的是,如果我在depencProperty.Register中替换IEnumerable代替Object,它仍然有效。不知道该怎么办。。。