监控财产的变化

时间:2012-02-29 15:31:17

标签: c# properties propertychanged

我有一个类的两个属性(WPF控件):HorizontalOffsetVerticalOffset(都是公共Double)。每当这些属性发生变化时,我想调用一个方法。我怎样才能做到这一点?我知道一种方法 - 但我很确定这不是正确的方法(使用DispatcherTimer非常短的刻度间隔来监控属性。)

编辑更多背景:

这些属性属于telerik scheduleview控件。

2 个答案:

答案 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");
            }
        }
    }
}