Monitor a change in the property of a Telerik ScheduleView control in WPF
Asked Answered
E

2

13

I have 2 properties to a class (WPF control): HorizontalOffset and VerticalOffset (both public Double's). I would like to call a method whenever these properties change. How can I do this? I know of one way - but I'm pretty sure it's not the right way (using a DispatcherTimer of very short tick intervals to monitor the property).

EDIT FOR MORE CONTEXT:

These properties belong to a telerik scheduleview control.

Eggplant answered 29/2, 2012 at 15:31 Comment(5)
Use events? msdn.microsoft.com/en-us/library/awbftdfh.aspxBibliopegy
I know how to subscribe to existing events - but I have no experience with creating my own events ready for subscription - is this possible? Is this the way you would say is most efficient for what I want to achieve here?Eggplant
Well, given that these are two properties on a type you don't own; you need to see what mechanism, if any, Telerik have exposed on the control for monitoring those properties. Given it's WPF, I would have thought it's INotifyPropertyChanged. In this case you're not exposing your own event source, you need to hope that one already exists on that controlBibliopegy
I'll have a look into that now then. But assuming there isn't already a way of monitoring these properties changing - is there no other way to observe properties??Eggplant
Not really, no. Certainly using a timer is not the way forward. Casting an eye over the (slightly sticky, it has to be said) Telerik API docs, the control appears to implement INotifyPropertyChanged; therefore you subscribe to it's PropertyChanged event and do something when the args.PropertyName is either "HorizontalOffset" or "VerticalOffset"Bibliopegy
B
25

Leverage the INotifyPropertyChanged interface implementation of the control.

If the control is called 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
  }
}
Bibliopegy answered 29/2, 2012 at 15:48 Comment(0)
T
6

I know of one way ... DispatcherTimer

Wow avoid that :) INotifyPropertyChange interface is your friend. See the msdn for samples.

You basically fire an event(usually called onPropertyChanged) on the Setter of your properties and the subscribers handle it.

an example implementation from the msdn goes:

// 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");
            }
        }
    }
}
Tarnetgaronne answered 29/2, 2012 at 15:33 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.