2009-05-18 34 views

回答

12

重复使用PropertyPath是诱人的,因为它支持在指出和索引时遍历嵌套属性。你可以自己编写类似的功能,我过去也有自己的功能,但它涉及半复杂的文本解析和大量的反射工作。

Andrew指出你可以简单地重用WPF中的PropertyPath。我假设你只是想针对一个对象来评估这个路径,在这种情况下代码是有点牵扯的。要评估PropertyPath,必须在针对DependencyObject的Binding中使用它。为了演示这一点,我刚刚创建了一个名为BindingEvaluator的简单DependencyObject,它具有一个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事件以支持读取值的变化。我希望这有帮助!

+1

你会如何回复该属性? – 2009-11-11 18:27:10

0

我看不出有什么理由不能重用它。

参见PropertyPath

实现用于 描述属性如下 路径另一个属性的数据结构,或低于一个拥有 类型。属性路径用于绑定到对象的数据 ,以及故事板 和动画的时间轴。

相关问题