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;
                    }
                }
            };
        }