我有一個類(WPF控件)的2個屬性:HorizontalOffset
和VerticalOffset
(均爲公開Double
's)。我想在這些屬性發生變化時調用方法。我怎樣才能做到這一點?我知道一種方式 - 但我很確定這不是正確的方法(使用非常短的滴答間隔的DispatcherTimer
來監控該屬性)。監視屬性變化
編輯更多的上下文:
這些屬性屬於Telerik的scheduleview控制。
我有一個類(WPF控件)的2個屬性:HorizontalOffset
和VerticalOffset
(均爲公開Double
's)。我想在這些屬性發生變化時調用方法。我怎樣才能做到這一點?我知道一種方式 - 但我很確定這不是正確的方法(使用非常短的滴答間隔的DispatcherTimer
來監控該屬性)。監視屬性變化
編輯更多的上下文:
這些屬性屬於Telerik的scheduleview控制。
槓桿控制的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
}
}
完美,正是我在伴侶後 - 謝謝。 – 2012-02-29 15:55:35
我知道的一種方式...
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");
}
}
}
}
感謝Zortkun,請參閱我在OP中的編輯(這是一個課程/控制我不能編輯) - 你的答案仍然適用?我現在將研究INotifyPropertyChange。 – 2012-02-29 15:36:35
我對Telerik的東西並不熟悉,Daniel.But在評論中,我看到你問到如何創建事件,我爲此發佈了一個編輯。 @安德拉斯佐爾坦似乎有你的答案。 :) – 2012-02-29 15:51:45
再次感謝Zortkun – 2012-02-29 15:55:19
使用事件? http://msdn.microsoft.com/en-us/library/awbftdfh.aspx – 2012-02-29 15:34:11
我知道如何訂閱現有的事件 - 但我沒有創建自己的事件準備訂閱的經驗 - 這可能嗎?這是你說的最有效率的方式嗎? – 2012-02-29 15:36:08
那麼,鑑於這些是你不擁有的類型的兩個屬性;您需要了解Telerik在監控這些屬性的控件上是否暴露了什麼機制(如果有的話)。鑑於它是WPF,我會認爲它是'INotifyPropertyChanged'。在這種情況下,你並沒有公開你自己的事件源,你需要希望那個控件上已經存在一個 – 2012-02-29 15:38:08