public CrewViewModelCollection Clone(TankViewModelBase owner, TankViewModelCloneFlags flags)
        {
            var clone = new CrewViewModelCollection(_commandBindings);

            foreach (var crew in this)
            {
                var deepCopy = false;
                foreach (var role in crew.Crew.AllRoles)
                {
                    switch (role)
                    {
                    case CrewRoleType.Commander:
                        deepCopy = (flags & TankViewModelCloneFlags.Commander) == TankViewModelCloneFlags.Commander;
                        break;

                    case CrewRoleType.Driver:
                        deepCopy = (flags & TankViewModelCloneFlags.Driver) == TankViewModelCloneFlags.Driver;
                        break;

                    case CrewRoleType.Gunner:
                        deepCopy = (flags & TankViewModelCloneFlags.Gunner) == TankViewModelCloneFlags.Gunner;
                        break;

                    case CrewRoleType.Loader:
                        deepCopy = (flags & TankViewModelCloneFlags.Loader) == TankViewModelCloneFlags.Loader;
                        break;

                    case CrewRoleType.Radioman:
                        deepCopy = (flags & TankViewModelCloneFlags.Radioman) == TankViewModelCloneFlags.Radioman;
                        break;
                    }

                    if (deepCopy)
                    {
                        break;
                    }
                }

                if (deepCopy)
                {
                    clone.Add(crew.Clone(owner, crew.Index));
                }
                else
                {
                    clone.Add(crew);
                }
            }
            return(clone);
        }
        internal void InheritCrews(CrewViewModelCollection targetCrews)
        {
            _suppressModificationContextUpdate = true;

            var targetCrewSet = new HashSet <CrewViewModel>(targetCrews);

            foreach (var crew in this.Crews)
            {
                var targetCrew = targetCrews.FirstOrDefault(c => c.Crew.PrimaryRole == crew.Crew.PrimaryRole);
                if (targetCrew != null)
                {
                    targetCrewSet.Remove(targetCrew);
                    crew.CopyFrom(targetCrew);
                }
            }

            _suppressModificationContextUpdate = false;

            this.UpdateModificationContext();
        }