2009-05-18 12 views

Respuesta

12

La reutilización de PropertyPath es tentadora ya que admite el desplazamiento de propiedades anidadas como se señala y los índices. Usted mismo podría escribir una funcionalidad similar, yo mismo he trabajado en el pasado pero implica un análisis de texto semi complicado y un montón de trabajo de reflexión.

Como señala Andrew, simplemente puede volver a utilizar PropertyPath de WPF. Asumo que solo quieres evaluar esa ruta contra un objeto que tienes, en cuyo caso el código está un poco involucrado. Para evaluar PropertyPath debe usarse en un enlace contra un DependencyObject. Para demostrar esto, acabo de crear un DependencyObject simple llamado BindingEvaluator que tiene una DependencyProperty única. La verdadera magia sucede llamando a BindingOperations.SetBinding que aplica el enlace para que podamos leer el valor evaluado.

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

Si desea ampliar esta usted podría cablear los eventos PropertyChanged para apoyar la lectura de valores que cambian. ¡Espero que esto ayude!

+1

¿Cómo escribirías de nuevo a esa propiedad? –

+0

Acabo de actualizar el ejemplo de código para incluir la actualización del objetivo. Solo tienes que asegurarte de que el enlace es bidireccional y proporcionar un setter. –

0

No veo ningún motivo por el que no pueda volver a utilizarlo.

Ver PropertyPath:

implementa una estructura de datos para describir una propiedad como un camino por debajo de otra propiedad, o por debajo de un tipo poseer. Las rutas de propiedad se usan en los datos vinculados a objetos, y en guiones gráficos y líneas de tiempo para animaciones.

Cuestiones relacionadas