private MediaItemViewModel BuildMediaItemsTimelineMediaItemViewModel(IMediaItem mediaItem, MediaItemsTimelineViewModel mediaItemsTimelineViewModel, TrackViewModel trackViewModel)
 {
     return new MediaItemViewModel
     {
         MediaItem = mediaItem,
         MediaItemsTimelineViewModel = mediaItemsTimelineViewModel,
         TrackViewModel = trackViewModel
     };
 }
        private TrackViewModel BuildMediaItemsTimelineTrackViewModel(ITrack track, MediaItemsTimelineViewModel mediaItemsTimelineViewModel)
        {
            var trackViewModel = new TrackViewModel {
                MediaItems = new ObservableCollection<MediaItemViewModel>(),
                Track = track
            };

            trackViewModel.DropHandler = new TrackViewModelDropHandler(trackViewModel);

            CollectionObserver.BindCollection(trackViewModel.MediaItems,
                                              track.MediaItems,
                                              mediaItem => BuildMediaItemsTimelineMediaItemViewModel(mediaItem, mediaItemsTimelineViewModel, trackViewModel));
            return trackViewModel;
        }
        private void BuildMediaItemsTimelineViewModel()
        {
            _mediaItemsTimelineViewModel = new MediaItemsTimelineViewModel
                {
                    Tracks = new ObservableCollection<TrackViewModel>(),
                    MillisecondsPerPixel = MillisecondsPerPixel
                };

            CollectionObserver.BindCollection(_mediaItemsTimelineViewModel.Tracks, _tracks, track => BuildMediaItemsTimelineTrackViewModel(track, _mediaItemsTimelineViewModel));
        }