public DataPoint(DataPoint previous, TimeFrame frame, SingleTimeLineControl control)
 {
     _previous = previous;
     _frame = frame;
     _control = control;
     if (_previous != null)
         _previous.OnEndChanges += OnPreviousEndChangesHandler;
     if (_frame != null)
     {
         _logicalX = _control.GetDataPointXFromFrame(frame);
         _frame.PropertyChanged += PropertyChangedHandler;
     }
     OnEndChanges += OnEndChangesHandler;
 }
 private double GetDataPointXFromFrame(TimeFrame frame)
 {
     return frame.EndTime.TotalSeconds * PixelsPerUnit;
 }
 private void OnTimeFrameEndTimeChangesHandler(TimeFrame timeFrame)
 {
     if (timeFrame.EndTime > AnimationTotalTime)
         AnimationTotalTime = timeFrame.EndTime;
 }
 private BoneAnimationTimeFrameModel GetFrameBefore(ObservableCollection<TimeFrame> items, TimeFrame frame)
 {
     if (!items.Any()) return null;
     return items.FirstOrDefault(i => i.EndTime == frame.StartTime) as BoneAnimationTimeFrameModel;
 }
 private void OnStartTimeChangesHandler(TimeFrame frame)
 {
     if (AnimationFrame == null) return;
     AnimationFrame.StartTime = StartTime;
 }
 private void OnEndTimeChangesHandler(TimeFrame frame)
 {
     if (AnimationFrame == null) return;
     AnimationFrame.EndTime = EndTime;
 }