2012-02-29 16 views
8

Tengo 2 propiedades para una clase (control WPF): HorizontalOffset y VerticalOffset (ambas públicas Double). Me gustaría llamar a un método cada vez que cambien estas propiedades. ¿Cómo puedo hacer esto? Sé de una sola manera, pero estoy bastante seguro de que no es la forma correcta (utilizando un DispatcherTimer de intervalos de tilde muy cortos para controlar la propiedad).Controlar un cambio en la propiedad

EDITAR PARA MÁS CONTEXTO:

Estas propiedades pertenecen a un control telerik scheduleview.

+1

Use eventos? http://msdn.microsoft.com/en-us/library/awbftdfh.aspx –

+0

Sé cómo suscribirme a eventos existentes, pero no tengo experiencia en crear mis propios eventos listos para la suscripción. ¿Es esto posible? ¿Es esta la manera en que diría que es más eficiente para lo que quiero lograr aquí? –

+2

Bueno, dado que estas son dos propiedades de un tipo que no es de su propiedad; necesita ver qué mecanismo, si alguno, Telerik ha expuesto en el control para monitorear esas propiedades. Dado que es WPF, hubiera pensado que es 'INotifyPropertyChanged'. En este caso, no está exponiendo su propia fuente de eventos, necesita esperar que ya exista uno en ese control –

Respuesta

17

aprovechar la aplicación INotifyPropertyChanged interfaz del control.

Si el control se llama myScheduleView:

//subscribe to the event (usually added via the designer, in fairness) 
myScheduleView.PropertyChanged += new PropertyChangedEventHandler(
    myScheduleView_PropertyChanged); 

private void myScheduleView_PropertyChanged(Object sender, 
    PropertyChangedEventArgs e) 
{ 
    if(e.PropertyName == "HorizontalOffset" || 
    e.PropertyName == "VerticalOffset") 
    { 
    //TODO: something 
    } 
} 
+0

Perfecto, justo lo que yo era compañero, gracias. –

5

Sé de una manera ... DispatcherTimer

Wow evitar que :) INotifyPropertyChange interfaz es su amigo. Vea the msdn para muestras.

Básicamente se desencadena un evento (generalmente llamado onPropertyChanged) en el Setter de sus propiedades y los suscriptores lo manejan.

una implementación de ejemplo de la msdn va:

// This is a simple customer class that 
// implements the IPropertyChange interface. 
public class DemoCustomer : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged;  
    private void NotifyPropertyChanged(String info) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(info));    
    } 

    public string CustomerName 
    { 
     //getter 
     set 
     { 
      if (value != this.customerNameValue) 
      { 
       this.customerNameValue = value; 
       NotifyPropertyChanged("CustomerName"); 
      } 
     } 
    } 
} 
+0

Gracias Zortkun, por favor vea mi edición en OP (es una clase/control que no puedo editar) - ¿su respuesta todavía se aplica? Voy a buscar en INotifyPropertyChange ahora. –

+1

No estoy familiarizado con las cosas de Telerik, Daniel. Pero en los comentarios que vi que preguntaste sobre cómo se podrían crear los eventos, publiqué una edición para eso. @Andras Zoltan parece tener tu respuesta también. :) –

+0

Gracias de nuevo Zortkun –

Cuestiones relacionadas