2009-05-18 9 views

Odpowiedz

12

Ponowne wykorzystanie właściwości PropertyPath jest kuszące, ponieważ obsługuje przeszukiwanie zagnieżdżonych właściwości podczas wskazywania i indeksowania. Możesz napisać podobną funkcjonalność samodzielnie, mam już siebie w przeszłości, ale wymaga to półautomatycznego parsowania tekstów i mnóstwa refleksji.

Jak wskazuje Andrew, można po prostu ponownie użyć właściwości PropertyPath z WPF. Zakładam, że chcesz tylko ocenić tę ścieżkę względem obiektu, który masz, w którym to przypadku kod jest trochę zaangażowany. Aby ocenić właściwość PropertyPath, należy ją zastosować w powiązaniu z obiektem zależnym. Aby to zademonstrować, właśnie stworzyłem prosty obiekt DependencyObject o nazwie BindingEvaluator, który ma pojedynczą właściwość DependencyProperty. Prawdziwa magia dzieje się wtedy, wywołując BindingOperations.SetBinding, która stosuje wiązanie, abyśmy mogli odczytać oszacowaną wartość.

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); } 
    } 
} 

Jeśli chcesz przedłużyć to, możesz połączyć zdarzenia PropertyChanged w celu obsługi zmian wartości odczytu. Mam nadzieję, że to pomoże!

+1

Jak można napisać z powrotem do tej nieruchomości? –

+0

Właśnie zaktualizowałem próbkę kodu, aby uwzględnić Aktualizację celu. Musisz tylko upewnić się, że Binding jest TwoWay i zapewnić seterowi. –

0

Nie widzę żadnego powodu, dla którego nie można go użyć ponownie.

Zobacz PropertyPath:

Implementacja struktury danych dla opisujące właściwości jako ścieżka poniżej innego mienia, lub poniżej na posiadanie typu. Ścieżki właściwości są używane w powiązaniu danych z obiektami oraz w scenorysach i liniach czasowych animacji.

Powiązane problemy