TimeBar / Sparkline - ItemsSource is updated and TimeBar headers do not reflect changes...

7 posts, 0 answers
  1. Rob
    Rob avatar
    238 posts
    Member since:
    Jan 2009

    Posted 30 Mar 2012 Link to this post

    I have a basic RadTimeBar/RadColumnSparkline combo with a viewmodel data context.  When I update the "intervaltype", my ItemsSource is updated (click the "Change Data" button).  The RadColumnSparkline updates, but the headers in the RadTimeBar are no longer in sync.  As soon as I touch the RadTimeBar scrollbar everything seems to redraw itself properly...

    <StackPanel x:Name="LayoutRoot" Background="Pink">
       <Button Click="ChangeData" Content="Change Data" />
       <telerik:RadTimeBar x:Name="timeBar" Height="300" Width="800" PeriodStart="{Binding PeriodStart, Mode=TwoWay}"
    PeriodEnd="{Binding PeriodEnd, Mode=TwoWay}" SelectionStart="{Binding SelectionStart, Mode=TwoWay}" SelectionEnd="{Binding SelectionEnd, Mode=TwoWay}" IsSnapToIntervalEnabled="True" 
       >
          <telerik:RadTimeBar.Intervals>
             <telerik:CenturyInterval IntervalSpans="1" />
             <telerik:DecadeInterval />
             <telerik:YearInterval IntervalSpans="1" />
             <!--telerik:QuarterInterval /-->
             <telerik:MonthInterval IntervalSpans="1,3" />
             <!--telerik:WeekInterval IntervalSpans="1" /-->
             <telerik:DayInterval IntervalSpans="1,7" />
             <!--<telerik:HourInterval IntervalSpans="1" />-->
          </telerik:RadTimeBar.Intervals>
          <telerik:RadColumnSparkline x:Name="columnSparkline" ItemsSource="{Binding Points}" XValuePath="XValue" YValuePath="YValue" ColumnLayoutMode="Between" ColumnWidthPercent="0.8" EmptyPointBehavior="ShowAsZero" AutoRange="False" MinYValue="0" MaxYValue="{Binding MaxYValue}" />
       </telerik:RadTimeBar>
    </StackPanel>


    namespace SilverlightApplication10
    {
        public partial class MainPage : UserControl
        {
            public VM vm = new VM();
            public MainPage()
            {
                InitializeComponent();
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
            }
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                vm.PeriodStart = new DateTime(2012, 1, 1);
                vm.PeriodEnd = new DateTime(2012, 3, 1);
                vm.IntervalType = IntervalType.Daily;
                this.DataContext = vm;
            }
            private void ChangeData(object sender, RoutedEventArgs e)
            {
                vm.IntervalType = vm.IntervalType == IntervalType.Daily ? IntervalType.Monthly : IntervalType.Daily;
            }
        }
     
        public enum IntervalType
        {
            Daily,
            Monthly
        }
     
        public class VM : Notify
        {
            private void RefreshDataPoints()
            {
                ObservableCollection<Point> p = new ObservableCollection<Point>();
                Random r = new Random();
                if (this.IntervalType == IntervalType.Daily)
                {
                    this.PeriodEnd = new DateTime(2012, 3, 1);
                    for (DateTime c = this.PeriodStart; c < this.PeriodEnd; c = c.AddDays(1))
                    {
                        p.Add(new Point() { XValue = c, YValue = r.Next(0, 100) });
                    }
                }
                else
                {
                    this.PeriodEnd = new DateTime(2012, 4, 1);
                    p.Add(new Point() { XValue = new DateTime(2012, 1, 1), YValue = r.Next(0, 100) });
                    p.Add(new Point() { XValue = new DateTime(2012, 2, 1), YValue = r.Next(0, 100) });
                    p.Add(new Point() { XValue = new DateTime(2012, 3, 1), YValue = r.Next(0, 100) });
                }
                this.Points = p;
            }
            private IntervalType _IntervalType = IntervalType.Daily;
            public IntervalType IntervalType
            {
                get
                {
                    return this._IntervalType;
                }
                set
                {
                    this._IntervalType = value;
                    RaisePropertyChanged("IntervalType");
                    RefreshDataPoints();
                }
            }
            private DateTime _PeriodStart = DateTime.MinValue;
            public DateTime PeriodStart
            {
                get
                {
                    return this._PeriodStart;
                }
                set
                {
                    this._PeriodStart = value;
                    RaisePropertyChanged("PeriodStart");
                    RaisePropertyChanged("SelectionStart");
                }
            }
            private DateTime _PeriodEnd = DateTime.MaxValue;
            public DateTime PeriodEnd
            {
                get
                {
                    return this._PeriodEnd;
                }
                set
                {
                    this._PeriodEnd = value;
                    RaisePropertyChanged("PeriodEnd");
                    RaisePropertyChanged("SelectionEnd");
                }
            }
            public DateTime SelectionStart
            {
                get
                {
                    return this.PeriodStart;
                }
            }
            public DateTime SelectionEnd
            {
                get
                {
                    return this.PeriodEnd;
                }
            }
            private ObservableCollection<Point> _Points = new ObservableCollection<Point>();
            public ObservableCollection<Point> Points
            {
                get
                {
                    return this._Points;
                }
                set
                {
                    this._Points = value;
                    RaisePropertyChanged("Points");
                    RaisePropertyChanged("MaxYValue");
                }
            }
            public int MaxYValue
            {
                get
                {
                    return (this.Points == null || this.Points.Count() == 0 ? 0 : this.Points.Max(itm => itm.YValue));
                }
            }
        }
     
        public class Point : Notify
        {
            private DateTime _XValue = DateTime.MinValue;
            public DateTime XValue
            {
                get
                {
                    return this._XValue;
                }
                set
                {
                    this._XValue = value;
                    RaisePropertyChanged("XValue");
                }
            }
            private int _YValue = 0;
            public int YValue
            {
                get
                {
                    return this._YValue;
                }
                set
                {
                    this._YValue = value;
                    RaisePropertyChanged("YValue");
                }
            }
        }
     
        public class Notify : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            protected void RaisePropertyChanged(string propertyName)
            {
                PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
                if ((propertyChanged != null))
                {
                    propertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
        }
     
     
    }

     

  2. Rob
    Rob avatar
    238 posts
    Member since:
    Jan 2009

    Posted 30 Mar 2012 Link to this post

    Forgot to attach my images...
  3. DevCraft banner
  4. Tsvetie
    Admin
    Tsvetie avatar
    1517 posts

    Posted 05 Apr 2012 Link to this post

    Hi Rob,

    Thank you for bringing the problem to our attention. I forwarded it to our developers and we will fix it for the next release. The fix will be part of the latest internal build that we will upload next week as well.

    In the meantime, as a workaround, you can update the values of the VisiblePeriodStart/VisiblePeriodEnd properties as well, when changing the "intervaltype".

    I have updated your Telerik points for bringing the problem to our attention. 

    Kind regards,
    Tsvetie
    the Telerik team
    Sharpen your .NET Ninja skills! Attend Q1 webinar week and get a chance to win a license! Book your seat now >>
  5. Fredy
    Fredy avatar
    7 posts
    Member since:
    Mar 2012

    Posted 19 May 2012 Link to this post

    I have the same problem!

    Do not
     have a workaround for now?

    Please
     let me know when it is finally resolved. 

    Thanks!.
  6. Tsvetie
    Admin
    Tsvetie avatar
    1517 posts

    Posted 24 May 2012 Link to this post

    Hi Fredy,

    I have provided a workaround for the problem in my previous post. Additionally, in case you download the latest internal build, and test your application with it, the problem should be fixed. The fix will also be part of the next official release, which is scheduled for the beginning of June.

    Greetings,
    Tsvetie
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

  7. Paolo
    Paolo avatar
    423 posts
    Member since:
    Jun 2009

    Posted 05 Jun 2012 Link to this post

    excuse me has this problem been fixed with latest internal build? I think I've got the same problem in a MVVM pattern when changing a RadGridView selected item...
    Thanks
  8. Tsvetie
    Admin
    Tsvetie avatar
    1517 posts

    Posted 06 Jun 2012 Link to this post

    Hi Paolo,

    The problem, described in the original post in this forum thread was fixed in the latest internal build, as already mentioned. In case you still have problems using RadTimeBar with RadSparkline, please open a formal support ticket and send us detailed information on the problem that you have, together with a simple running project, demonstrating the problem itself.

    Kind regards,
    Tsvetie
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Back to Top
DevCraft banner