public void MoveChannels(IList <ChannelInfo> channels, bool up) { if (channels.Count == 0) { return; } if (up && channels[0].GetPosition(this.SubListIndex) <= this.ChannelList.FirstProgramNumber) { return; } int delta = (up ? -1 : +1); foreach (var channel in (up ? channels : channels.Reverse())) { int newProgramNr = channel.GetPosition(this.SubListIndex) + delta; ChannelInfo channelAtNewPos = this.ChannelList.Channels.FirstOrDefault(ch => ch.GetPosition(this.SubListIndex) == newProgramNr); if (channelAtNewPos != null) { channelAtNewPos.ChangePosition(this.SubListIndex, -delta); } channel.ChangePosition(this.SubListIndex, delta); } this.DataRoot.NeedsSaving = true; }