public BillsWindowViewModel(SummaryDatabase database, IRuleProvider ruleProvider, IViewModelFactory viewModelFactory) : base(ruleProvider) { this.viewModelFactory = viewModelFactory; billProvider = database.BillProvider; billListViewModel = viewModelFactory.CreateBillListViewModel(); categoryStatisticListViewModel = viewModelFactory.CreateCategoryStatisticListViewModel(); addBillCommand = new DelegateCommand(AddBill, () => CanAdd); foreach (Account account in database.AccountProvider.Items) { accountIcons.Add(account); } foreach (Expense expense in database.ExpenseProvider.Items) { expenseIcons.Add(expense); } database.AccountProvider.DatabaseChanged += (sender, e) => { if (e.ChangedAction == ChangedAction.Add) { accountIcons.Add(e.DataItem); } else if (e.ChangedAction == ChangedAction.Remove) { accountIcons.Remove(e.DataItem); if (accountIcons.Count == 0) { SelectedAccount = null; } } else { if (HasErrors) { OnPropertyChanged(new PropertyChangedEventArgs(nameof(Sum))); } } }; database.ExpenseProvider.DatabaseChanged += (sender, e) => { if (e.ChangedAction == ChangedAction.Add) { expenseIcons.Add(e.DataItem); } else if (e.ChangedAction == ChangedAction.Remove) { expenseIcons.Remove(e.DataItem); if (expenseIcons.Count == 0) { SelectedExpense = null; } } }; }