2010-03-11 17 views
7

Tengo un escenario como esteelevará automáticamente PropertyChanged cuando una propiedad de objeto interno se cambió

Class Parent 
{ 
    Property A; 
} 

Class A 
{ 
     Property X 
} 

¿Cómo puedo obtener una PropertyChangedNotification sobre Propiedad A cuando X cambia? No quiero referirme a 'Padre' en la clase A ni a ningún tipo de evento que arruine mi desacoplamiento. Lo que básicamente quiero es hacer el Parent.IsDirty==true. Esta es una versión muy simplificada de mi historia, tengo decenas de clases como los padres, por lo que estoy buscando algo de forma genérica para manejar esto.

Tenga en cuenta que este no es el código real. Tengo toda la implementación de INotifyPropertyChanged. Me pregunto cualquier mecanismo sencillo como RaisePropertyChanged("A.X")

Respuesta

8

Usted puede tratar de registrar el evento PropertyChanged en la clase padre. En el constructor puede subribe al evento:

public Parent() 
{ 
    A.OnPropertyChanged += OnAPropertyChanged; 
} 

void OnAPropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "X") 
     if(PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs("A")) 
} 

esperanza esto ayuda ...

+0

estoy eligiendo esta respuesta, pero me siento patrón MVVM mensajero es lo que estoy buscando. –

+0

@RoelF qué esto todavía trabajan en> = .Net 4.0? – Thomas

+0

@Thomas no veo por qué no lo sería en realidad ... – RoelF

0

No sé si esta es la mejor práctica, pero: ¿qué pasa con algo como esto:

private Movie movie; 
public Movie Movie 
{ 
    get { return movie; } 
    set 
    { 
     var oldProperties = typeof(Movie).GetProperties(); 
     foreach (var property in oldProperties) 
     { 
      if (property.GetValue(movie).GetHashCode() != value.GetType().GetProperty(property.Name).GetValue(value).GetHashCode()) 
      { 
       RaisePropertyChanged(property.Name); 
      } 
     } 

     movie = value; 

    } 
} 

seguramente usted puede tomar fuera a un ayudante externo que lleve los objetos 2 y el controlador de eventos

Cuestiones relacionadas