private void InitSettings()
        {
            var settings = _settingsRepository.GetSettings();
            var users    = _client.GetPhoneBook();

            if (settings == null)
            {
                var newSettings = new AppPreferences();
                var newAgents   = new ObservableCollectionEx <AgentEntry>();
                var retryStates = new ObservableCollectionEx <RetryState>()
                {
                    new RetryState {
                        Enabled = true, ProgressState = ProgressState.Error
                    },
                    new RetryState {
                        Enabled = true, ProgressState = ProgressState.Rejected
                    },
                    new RetryState {
                        Enabled = true, ProgressState = ProgressState.Aborted
                    },
                    new RetryState {
                        Enabled = true, ProgressState = ProgressState.NotFound
                    }
                };

                newAgents.AddItems(users.Select(userInfo => new AgentEntry(new PhoneBookItemInfo(userInfo), AgentState.Free)));
                newSettings.Agents             = newAgents;
                newSettings.RetryStates        = retryStates;
                newSettings.ChooseByOccupation = true;
                newSettings.ChooseByStatistics = false;
                newSettings.MaxConcurrentCalls = 5;

                _settingsRepository.SetSettings(newSettings);
                return;
            }

            foreach (var userInfo in users.Where(userInfo => !settings.Agents.Any(agent => agent.AgentInfo.Name.Equals(userInfo.Name))))
            {
                settings.Agents.Add(new AgentEntry(new PhoneBookItemInfo(userInfo), AgentState.Free));
            }

            var localAgents = settings.Agents.ToList();

            foreach (var agent in localAgents.Where(agent => !users.Any(user => user.Name.Equals(agent.AgentInfo.Name))))
            {
                settings.Agents.Remove(settings.Agents.FirstOrDefault(a => a.AgentInfo.Name.Equals(agent.AgentInfo.Name)));
            }

            _settingsRepository.SetSettings(settings);
        }
        public EditorViewModel(TargetPlatform platform, IEnumerable <IObjectEditor> editors)
        {
            if (platform == null)
            {
                throw new ArgumentNullException(nameof(platform));
            }
            if (editors == null)
            {
                throw new ArgumentNullException(nameof(editors));
            }

            TargetPlatform = platform;

            var observableEditors = new ObservableCollectionEx <IObjectEditor> ();

            Editors = observableEditors;
            observableEditors.CollectionChanged += OnEditorsChanged;
            observableEditors.AddItems(editors);              // Purposefully after the event hookup
        }
        private void RebuildCrmEntries()
        {
            try
            {
                var entries = _wcfCrmClient.GetAllCrmEntries();
                _internalCrmEntries = new ObservableCollectionEx <CrmEntry>();
                _internalCrmEntries.AddItems(entries);

                CrmEntries        = CollectionViewSource.GetDefaultView(_internalCrmEntries);
                CrmEntries.Filter = FilterItem;

                if (_internalCrmEntries.Count > 0)
                {
                    SelectedCrmEntry = _internalCrmEntries.First();
                }

                RaisePropertyChanged("CrmEntries");
            }
            catch (Exception ex)
            {
                Messenger.Default.Send(new NotificationMessage(ex.Message, ShowWcfWarningWindow));
            }
        }