2012-02-29 14 views
8

Mam 2 właściwości do klasy (kontrola WPF): HorizontalOffset i VerticalOffset (zarówno publiczne Double). Chciałbym wywołać metodę, gdy te właściwości się zmieniają. Jak mogę to zrobić? Znam jeden sposób - ale jestem prawie pewien, że to nie jest właściwa droga (używając bardzo krótkich odstępów czasu do monitorowania właściwości).Monitorowanie zmiany właściwości

edycji dla więcej kontekstu:

Właściwości te należą do kontroli Telerik scheduleview.

+1

użyć zdarzenia? http://msdn.microsoft.com/en-us/library/awbftdfh.aspx –

+0

W jaki sposób subskrybować istniejące wydarzenia - ale nie mam doświadczenia w tworzeniu własnych wydarzeń gotowych do subskrypcji - czy to możliwe? Czy to, jak powiedziałbyś, jest najbardziej efektywne w tym, co chcę tutaj osiągnąć? –

+2

Cóż, biorąc pod uwagę, że są to dwie właściwości na typie, który nie należy do Ciebie; musisz zobaczyć, jaki mechanizm, jeśli w ogóle, Telerik wyeksponował na kontrole w celu monitorowania tych właściwości. Biorąc pod uwagę to WPF, Myślałem, że to "INotifyPropertyChanged". W tym przypadku nie wystawiasz swojego własnego źródła zdarzeń, musisz mieć nadzieję, że już istnieje na tej kontroli. –

Odpowiedz

17

Dźwignia realizacja INotifyPropertyChanged interfejs sterowania.

Jeśli kontrola jest nazywany 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

Idealne, właśnie to, co byłem po kolega - dzięki. –

5

Znam jeden sposób ... DispatcherTimer

Wow uniknąć tego :) INotifyPropertyChange interfejs jest twoim przyjacielem. Zobacz the msdn dla próbek.

Po prostu wywołujesz zdarzenie (zwykle nazywane onPropertyChanged) na Setter swoich właściwościach, a subskrybenci go obsługują.

przykładem wdrożenia od msdn idzie:

// 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

Dzięki Zortkun, zobacz moją edycję w OP (jest to klasa/kontrola, której nie mogę edytować) - czy twoja odpowiedź nadal obowiązuje? Zajrzę teraz do INotifyPropertyChange. –

+1

Nie jestem zaznajomiony z materiałem Telerik, Daniel.Ale w komentarzach zobaczyłem, że pytasz o to, w jaki sposób można tworzyć te wydarzenia, napisałem o tym zmianę. @Andras Zoltan wydaje się mieć twoją odpowiedź. :) –

+0

Jeszcze raz dziękuję Zortkun –