Отслеживайте изменение свойства элемента управления Telerik ScheduleView в WPF

У меня есть 2 свойства для класса (управление WPF): HorizontalOffset и VerticalOffset (оба общедоступные Double). Я хотел бы вызывать метод всякий раз, когда эти свойства изменяются. Как я могу это сделать? Я знаю один способ, но я почти уверен, что это неправильный способ (использование DispatcherTimer очень коротких интервалов тиков для мониторинга свойства).

РЕДАКТИРОВАТЬ ДЛЯ БОЛЬШЕ КОНТЕКСТА:

Эти свойства принадлежат элементу управления расписанием телерика.


person Community    schedule 29.02.2012    source источник
comment
Использовать события? msdn.microsoft.com/en-us/library/awbftdfh.aspx   -  person Andras Zoltan    schedule 29.02.2012
comment
Я знаю, как подписаться на существующие события, но у меня нет опыта создания собственных событий, готовых для подписки, возможно ли это? Вы бы сказали, что этот способ наиболее эффективен для того, чего я хочу здесь достичь?   -  person    schedule 29.02.2012
comment
Что ж, учитывая, что это два свойства типа, которым вы не владеете; вам нужно увидеть, какой механизм, если таковой имеется, Telerik выставил на контроль для мониторинга этих свойств. Учитывая, что это WPF, я бы подумал, что это INotifyPropertyChanged. В этом случае вы не предоставляете свой собственный источник событий, вам нужно надеяться, что он уже существует в этом элементе управления.   -  person Andras Zoltan    schedule 29.02.2012
comment
Я посмотрю на это сейчас, тогда. Но если предположить, что уже нет способа отслеживать изменение этих свойств, нет ли другого способа наблюдать за свойствами??   -  person    schedule 29.02.2012
comment
Не на самом деле нет. Конечно, использование таймера — не путь вперед. Бросив взгляд на (слегка липкие, надо сказать) документы Telerik API, кажется, что элемент управления реализует INotifyPropertyChanged; поэтому вы подписываетесь на это событие PropertyChanged и что-то делаете, когда args.PropertyName равно "HorizontalOffset" или "VerticalOffset"   -  person Andras Zoltan    schedule 29.02.2012


Ответы (2)


Используйте реализацию интерфейса 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
  }
}
person Andras Zoltan    schedule 29.02.2012

Я знаю один способ... DispatcherTimer

Вау, избегайте этого :) INotifyPropertyChange интерфейс — ваш друг. Примеры см. в 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");
            }
        }
    }
}
person Orkun Ozen    schedule 29.02.2012