que tengo una clase Persona:Ejecución INotifyPropertyChanged de propiedades anidadas
public class Person : INotifyPropertyChanged
{
private string _name;
public string Name{
get { return _name; }
set {
if (_name != value) {
_name = value;
OnPropertyChanged("Name");
}
}
private Address _primaryAddress;
public Address PrimaryAddress {
get { return _primaryAddress; }
set {
if (_primaryAddress != value) {
_primaryAddress = value;
OnPropertyChanged("PrimaryAddress");
}
}
//OnPropertyChanged code goes here
}
tengo una clase Dirección:
public class Address : INotifyPropertyChanged
{
private string _streetone;
public string StreetOne{
get { return _streetone; }
set {
if (_streetone != value) {
_streetone = value;
OnPropertyChanged("StreetOne");
}
}
//Other fields here
//OnPropertyChanged code goes here
}
tengo un modelo de vista:
public class MyViewModel
{
//constructor and other stuff here
private Person _person;
public Person Person{
get { return _person; }
set {
if (_person != value) {
_person = value;
OnPropertyChanged("Person");
}
}
}
Tengo una visión que tiene las siguientes líneas:
<TextBox Text="{Binding Person.Name, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged />
<TextBox Text="{Binding Person.Address.StreetOne, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged />
Ambos valores aparecen en el cuadro de texto cuando se carga la vista.
Los cambios en el primer cuadro de texto dispararán OnPropertyChanged("Person")
en MyViewModel. Estupendo.
Los cambios en el segundo cuadro de texto ("Person.Address.StreetOne")
NO activa OnPropertyChanged("Person")
dentro de MyViewModel. Lo que significa que no llama al método SET del objeto Persona. No es bueno. Curiosamente, se llama al método SET de StreetOne dentro de la clase Address.
¿Cómo se obtiene el método SET del objeto Persona dentro del modelo de vista cuando se cambia Person.Address.StreetOne
???
¿Debo aplanar mis datos para que SteetOne esté dentro de Person and not Address?
Gracias!
@Revious ... Con respecto a su generosidad, la pregunta ya ha sido respondida. Entonces, ¿qué tipo de respuesta estás buscando aquí? –
@ S. Akbari: la respuesta aceptada es una solución que está aplanando la propiedad ..Estaba buscando una solución real – Revious
@Revious Agregué una respuesta con la alternativa estándar que es propagar los cambios desde el niño al padre utilizando un controlador de eventos. No estoy seguro de cómo se pasó por alto en las respuestas originales, ya que es bastante estándar y una solución "real". –