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,它仍然有效。不知道该怎么办。。。