tutorial template español data wpf mvvm binding

español - wpf data template



Enlace a ViewModel.SubClass.Property(subpropiedad) (2)

digamos que tengo una sección en mi pantalla donde se edita el "registro actual", por lo que mi modelo de vista tiene una clase con todas las propiedades editadas actualmente, tales como:

class Record { public string Notes { get { return "Foo"; } set { _notes = value; Notify("Notes"); } }

y agregamos esta clase al modelo de vista:

class AdjustsmentViewModel { public Record CurrentRecord { get { return new Record(); }} }

¿Cómo puedo enlazar a la propiedad Notes de CurrentRecord en mi vista? Intenté esto:

<TextBox Text="{Binding CurrentRecord.Notes, Mode=TwoWay}" VerticalScrollBarVisibility="Auto" TextWrapping="WrapWithOverflow" AcceptsReturn="True" />

Esto no está funcionando sin embargo. También intenté configurar DataContext de Around StackPanel:

<StackPanel DataContext="{Binding CurrentRecord}">

Después de eso, probé en mi TextBox {Binding Notes} y {Binding Path = Notes}, pero ninguno de estos parece funcionar.

Tal vez por encima realmente debería funcionar y estoy jugando algo en otro lugar?

Actualizar

Esto está sucediendo en un control de usuario. Este control de usuario tiene un modelo de vista separado, desde su ventana principal.

this.DataContext = UnityUtil.Resolve<AdjustmentsViewModel>();

También estoy viendo un error vinculante: la propiedad ''Notas'' no se encuentra en ''objeto'' '''' MainViewModel ''

ese modelo de vista se establece en la ventana principal.

para verificar que tengo el ViewModel correcto encuadernado, acabo de agregar esta propiedad directamente en el viewmodel:

public string Notes2 { get { return "Bar"; } }

y el correspondiente bloque de texto en la vista:

<TextBlock Text="{Binding Path=Notes2}" />

esto funciona como se esperaba

Gran éxito

Gracias a Ryan, pude encontrar el problema. No estaba en la propiedad en sí, sino en la forma en que se estaba configurando CurrentRecord. En mi setter, realizo una llamada al controlador INotifyPropertyChange, pero que tenía el nombre anterior de la propiedad. Entonces, la vista no recibía una notificación de CurrentRecord, así que supongo que la notificación de Notes no fue suficiente.

en conclusión, esta notación es correcta: {Binding Path = CurrentRecord.Notes}


Asegúrese de que su propiedad CurrentRecord esté 1) configurada y 2) notifique a la capa de interfaz de usuario que se ha producido un cambio.


Lo anterior debería funcionar, {Binding Path = CurrentRecord.Notes} es correcto. ¿Puedes verificar que tu datacontext esté configurado en tu viewmodel?

También verifique si su modelo de vista implementa INotifyPropertyChanged.

editar: acabo de crear un proyecto de muestra para recrear esto. No es necesario implementar INotifyPropertyChanged, solo funciona cuando el contexto de datos se establece en la máquina virtual.