我有一个类的两个属性(WPF控件):HorizontalOffset
和VerticalOffset
(都是公共Double
)。每当这些属性发生变化时,我想调用一个方法。我怎样才能做到这一点?我知道一种方法 - 但我很确定这不是正确的方法(使用DispatcherTimer
非常短的刻度间隔来监控属性。)
编辑更多背景:
这些属性属于telerik scheduleview控件。
答案 0 :(得分:24)
利用控件的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
}
}
答案 1 :(得分:6)
我知道一种方式......
DispatcherTimer
哇避免这个:) INotifyPropertyChange
界面是你的朋友。有关样本,请参阅the msdn。
您基本上会在您的媒体资源的onPropertyChanged
上触发一个事件(通常称为Setter
),并且订阅者会对其进行处理。
来自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");
}
}
}
}