private void ItemSort(Lyric sourceLyric) { int id = TargetList.IndexOf(sourceLyric); bool isMove = false; for (int i = id; i > 0; i--) { Lyric beforeLyric = TargetList[i - 1]; Lyric currentLyric = TargetList[i]; if (currentLyric != sourceLyric) { break; } if (currentLyric.CompareTo(beforeLyric) < 0) { TargetList.Insert(i + 1, beforeLyric); TargetList.Remove(beforeLyric); isMove = true; } } if (!_isInvoked && isMove && !_changedList.Contains(sourceLyric)) { _changedList.Add(sourceLyric); } }
protected LyricsChangeOperationBase(IEnumerable <Lyric> items, IList <Lyric> targetList) : base(targetList) { Items = items.ToList(); Positions = new Dictionary <int, Lyric>(); foreach (Lyric lyric in Items.ToList()) { Positions.Add(TargetList.IndexOf(lyric), lyric); } }