private void DeleteTrackGroup(Repository repo, TrackGroup group, bool confirm)
        {
            if (confirm && DisplayMessage != null) {
                if (!DisplayMessage.Confirm("트랙 그룹 삭제",
                    "포함된 트랙들과 관련된 정보 및 영상 파일이 모두 삭제됩니다.\r\n삭제하시겠습니까?"))
                    return;
            }

            for (int i = group.Children.Count - 1; i >= 0; i--) {
                if (group.Children[i] is TrackGroup) {
                    DeleteTrackGroup(repo, (TrackGroup)group.Children[i], false);
                } else {
                    DeleteTrack(repo, (Track)group.Children[i], false);
                }
            }
            group.Delete();
        }
        private void DeleteTrack(Repository repo, Track track, bool confirm)
        {
            if (confirm && DisplayMessage != null) {
                if (!DisplayMessage.Confirm("트랙 삭제",
                    "트랙과 관련된 정보 및 영상 파일이 모두 삭제됩니다.\r\n삭제하시겠습니까?"))
                    return;
            }

            // 재생 중이던 트랙이면 중지시킨다.
            if (track == ActiveTrack) {
                ActiveTrack = null;
            }
            // 선택 상태이면 선택을 해제한다.
            track.IsChecked = false;
            // 그룹에서 제거한다.
            track.Group.Remove(track);
            // 트랙 객체와 관련 파일들을 모두 삭제한다.
            repo.Delete(track);
        }