2010-10-14 5 views
16

Estoy tratando de encontrar la mejor manera de crear eventos PropertyChanged de propiedades anidadas en mi ModelView. Digamos que tengo mi ModelView PersonModelView que tiene una propiedad PersonModelView.Address. Address a su vez tiene una propiedad City. Cuando me enlace a City en mi opinión, haría algo como {Binding Address.City}.¿Cuál es una buena forma de generar eventos INotifyPropertyChanged a través de las propiedades de ViewModel con MVVM?

Mi problema es que incluso si implementa AddressINotifyPropertyChanged, la unión no conseguirá actualizada, ya que está manejando PropertyChanged en el PersonModelView, no Address. Creo que tengo dos opciones: (1) cambiar la fuente de la unión (o cambiar el DataContext) a la propiedad Address o (2) tienen el mango PersonModelViewPropertyChanged en el objeto Address y refire su propio PropertyChanged con algo como Address.City.

¿Cómo están solucionando esto? (Estoy usando MVVM light toolkit en el mo, pero estoy interesado en cualquier enfoque)

Respuesta

8

Si Address implementa INotifyPropertyChanged y plantea correctamente PropertyChanged eventos en su propiedad City continuación, la unión debe notar que la propiedad se ve obligada a ha cambiado.

+0

Estoy de acuerdo. Nunca he tenido que propagar eventos cuando un campo a un nivel o dos ha sido vinculado. Intente activar 'PropertyChanged' con' null' como el nombre de la propiedad y ponga un punto de interrupción en su setter de propiedades para asegurarse de que el enlace funciona (o verifique la ventana de salida). –

+0

Eso es un alivio real, debería hacer que mi código sea mucho más agradable. Supongo que debo haber cometido un error cuando probé esto por primera vez, lo hice nuevamente en una nueva solución y funciona bien. ¡Gracias por la ayuda chicos! – Geoff

1

¿Su objeto Address implementa INotifyPropertyChanged? Si no, creo que eso solucionaría el problema que estás viendo.

Editar: Lo sentimos, acabo de notar que usted mencionó en su mensaje que ha intentado esto ya. ¿Has intentado suscribirte al evento PropertyChanged del objeto Address en tu PersonViewModel? OnChanged, puede realizar PropertyChanged en su objeto Address.

+0

sí lo hace. Entonces, ¿el enlace debe manejar el evento PropertyChanged en PersonModelView o Address si el enlace es {Binding Address.City}? (y PersonModelView es el DataContext por supuesto) – Geoff

+0

¿Podría publicar su código? Me parece que la forma en que lo tienes configurado debería funcionar. ¿Has mirado tu ventana de 'Salida' para asegurarte de que está vinculando correctamente? – JSprang

3

Aquí hay un SO mensaje que contenga una solución en forma de burbuja de estas notificaciones: When nesting properties that implement INotifyPropertyChanged must the parent object propogate changes?

Sin embargo, IIRC WPF tiene la inteligencia para monitorear automáticamente Dirección para las notificaciones INotifyPropertyChanged cuando una de aglutinantes de control se establece en Address.City sin PersonViewModel necesita volver a emitir las notificaciones de actualización del objeto Address.

+0

Ben, ¿quería volver a vincular a esta pregunta? –

+0

Erm, creo que ese es el enlace equivocado;) Bien, debo haberme perdido algo. ¡Pensé que las ataduras no podrían manejar eso, de vuelta al código para mí! – Geoff

+0

¡Uy! Gracias por atrapar eso. Enlace corregido. –

Cuestiones relacionadas