2009-05-18 32 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

實現用於 描述屬性如下 路徑另一個屬性的數據結構,或低於一個擁有 類型。屬性路徑用於綁定到對象的數據 ,以及故事板 和動畫的時間軸。

相關問題