在WPF中监视Telerik ScheduleView控件属性的更改

13
我有一个类(WPF控件)有2个属性:HorizontalOffset和VerticalOffset(都是公共的Double)。我想在这些属性改变时调用一个方法,该怎么做呢?我知道一种方法-但我几乎确定它不是正确的方法(使用一个非常短的tick间隔的DispatcherTimer来监视属性)。
补充更多背景资料:
这些属性属于Telerik ScheduleView控件。

1
使用事件吗?http://msdn.microsoft.com/zh-cn/library/awbftdfh.aspx - Andras Zoltan
我知道如何订阅现有事件 - 但我没有创建自己的可供订阅的事件的经验 - 这可能吗?这是您认为最有效的实现我想要达到的目标的方式吗? - user1017882
2
好的,考虑到这是您不拥有的类型上的两个属性; 您需要查看Telerik在控件上公开了哪些机制(如果有)。鉴于这是WPF,我认为它应该是INotifyPropertyChanged。在这种情况下,您没有公开自己的事件源,您需要希望该控件上已经存在一个事件源。 - Andras Zoltan
我现在会去看一下。但是假设没有已经监控这些属性变化的方法,难道就没有其他观察属性的方式了吗? - user1017882
1
不是的,不需要使用计时器。通过查看(有点棘手,必须承认)Telerik API文档,该控件似乎实现了INotifyPropertyChanged接口;因此,您可以订阅它的“PropertyChanged”事件,并在args.PropertyName为“HorizontalOffset”或“VerticalOffset”时执行某些操作。 - Andras Zoltan
2个回答

25

利用控件实现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
  }
}

6
我知道一种方法...DispatcherTimer 哇,避免使用这个 :) INotifyPropertyChange 接口是您的好朋友。请参阅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");
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接