protected override int Comparer(TrackView at, TrackView ta)
 {
     string p = at.Path ?? string.Empty;
     return p.CompareTo(ta.Path);
 }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.Duration.CompareTo(ta.Duration);
 }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.SkippedCount.CompareTo(ta.SkippedCount);
 }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.FileExists.CompareTo(ta.FileExists);
 }
 private IEnumerable<ITrack> GetContextual(TrackView context)
 {
     return GetContextualView(context).Select(t => t.Track);
 }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.DiscNumber.CompareTo(ta.DiscNumber);
 }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.Rating.CompareTo(ta.Rating);
 }
 protected override DateTime? DTAcessor(TrackView tr)
 {
     return tr.LastPLayed;
 }
 protected abstract int Comparer(TrackView at, TrackView ta);
            protected override int Comparer(TrackView at, TrackView ta)
            {
                if (at.Name == null)
                    return string.Empty.CompareTo(ta.Name);

                return at.Name.CompareTo(ta.Name);
            }
 private void CheckUnSelected(TrackView itv)
 {
     itv.ShowAlbum = false;
     var tvs = _SelectedTracks.Where(st => st.Album == itv.Album).ToList();
     if (tvs.Count == 1)
         tvs[0].ShowAlbum = true;
 }
 private void DoPrefixArtistName(TrackView context)
 {
     GetContextualView(context).Apply(tv => tv.PrefixArtistName());
 }
 private void DoRemoveTrackNumber(TrackView context)
 {
     GetContextualView(context).Apply(tv => tv.RemoveTrackNumber());
 }
 protected abstract DateTime? DTAcessor(TrackView tr);
 protected override int Comparer(TrackView at, TrackView ta)
 {
     string cp = at.AlbumGenre ?? string.Empty;
     return cp.CompareTo(ta.AlbumGenre);
 }
            protected override int Comparer(TrackView at, TrackView ta)
            {
                if (DTAcessor(at) == null)
                {
                    return (DTAcessor(ta) == null) ? 0 : SignedDiff;
                }

                if (DTAcessor(ta) == null)
                    return -SignedDiff;

                DateTime dt = (DateTime)DTAcessor(at);
                return dt.CompareTo((DateTime)DTAcessor(ta));
            }
 protected override int Comparer(TrackView at, TrackView ta)
 {
     return at.AlbumYear.CompareTo(ta.AlbumYear);
 }
            protected override DateTime? DTAcessor(TrackView tr)
            {
                if (tr.Album == null)
                    return null;

                return tr.Album.DateAdded;
            }
        private IEnumerable<TrackView> GetContextualView(TrackView context)
        {
            if (SelectedTracks.Contains(context))
                return SelectedTracks;

            return context.SingleItemCollection();
        }