2012-02-29 92 views
8

我有一個類(WPF控件)的2個屬性:HorizontalOffsetVerticalOffset(均爲公開Double's)。我想在這些屬性發生變化時調用方法。我怎樣才能做到這一點?我知道一種方式 - 但我很確定這不是正確的方法(使用非常短的滴答間隔的DispatcherTimer來監控該屬性)。監視屬性變化

編輯更多的上下文:

這些屬性屬於Telerik的scheduleview控制。

+1

使用事件? http://msdn.microsoft.com/en-us/library/awbftdfh.aspx – 2012-02-29 15:34:11

+0

我知道如何訂閱現有的事件 - 但我沒有創建自己的事件準備訂閱的經驗 - 這可能嗎?這是你說的最有效率的方式嗎? – 2012-02-29 15:36:08

+2

那麼,鑑於這些是你不擁有的類型的兩個屬性;您需要了解Telerik在監控這些屬性的控件上是否暴露了什麼機制(如果有的話)。鑑於它是WPF,我會認爲它是'INotifyPropertyChanged'。在這種情況下,你並沒有公開你自己的事件源,你需要希望那個控件上已經存在一個 – 2012-02-29 15:38:08

回答

17

槓桿控制的INotifyPropertyChanged接口實現。

如果控制被稱爲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

完美,正是我在伴侶後 - 謝謝。 – 2012-02-29 15:55:35

5

我知道的一種方式... DispatcherTimer

哇避免:) INotifyPropertyChange界面是你的朋友。樣品見the msdn

您基本上在屬性的Setter上觸發了一個事件(通常稱爲onPropertyChanged),並且訂戶處理它。

msdn的示例實現雲:

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

感謝Zortkun,請參閱我在OP中的編輯(這是一個課程/控制我不能編輯) - 你的答案仍然適用?我現在將研究INotifyPropertyChange。 – 2012-02-29 15:36:35

+1

我對Telerik的東西並不熟悉,Daniel.But在評論中,我看到你問到如何創建事件,我爲此發佈了一個編輯。 @安德拉斯佐爾坦似乎有你的答案。 :) – 2012-02-29 15:51:45

+0

再次感謝Zortkun – 2012-02-29 15:55:19