private void ExecuteManageLanguages() { var selected = Translations.Aggregate(0, (current, t) => current | t.Language); var vm = ServiceProvider.Inject(new LanguageChooserVM(null)); vm.SelectedLanguages = selected; vm.Name = Resources.Lbl.ManageLanguages; if (WindowService.ShowDialog(vm, canResize: true, allowSettings: false, saveSizeAndPosition: true, showOkCancelButtons: true, extraSettingsKey: "ManageLanguages") == true) { for (var i = 0; i < Entity.Translations.Count; ++i) { if ((Entity.Translations[i].Language & vm.SelectedLanguages) == 0) { Entity.Translations[i].Deleted = true; Entity.Translations[i].MakeDirty(); } } foreach (var li in LanguagesProvider.Languages) { if ((li.Id & vm.SelectedLanguages) != 0 && Entity.Translations.All(t => t.Language != li.Id)) { Entity.Translations.Add(EntityCreator.CreateTranslation(li.Id)); } } try { DataAccess.Save(Entity); } catch (Exception ex) { WindowService.ShowError(ex); } var parent = (MainWindowVM)Parent; if (Entity.Translations.Count(t => (t.Language & parent.Languages.SelectedLanguages) != 0) == 0) { parent.HideExpression(this); } else if (!parent.ShowEmptyTranslations && Entity.Translations.Where(t => (t.Language & parent.Languages.SelectedLanguages) != 0) .All(t => String.IsNullOrEmpty(t.Translation))) { parent.HideExpression(this); } else { PopulateTranslations(); } } }