private void ChangeMessages(ModifyModel modifyModel, CommunityViewModel changingViewModel) { switch (modifyModel.Modification.ModificationType) { case ModificationType.Add: AddMessage(); break; case ModificationType.Remove: RemoveMessage(); break; case ModificationType.Change: RemoveMessage(); AddMessage(); break; } void AddMessage() { MessageModel messageModel = modifyModel.Modification.NewValue.AssertTypeOf <MessageModel>(); MessageViewModel viewModel = messageModel.CreateViewModel(changingViewModel); changingViewModel.AddItem(viewModel); (changingViewModel.FindItemByType <AgentViewModel>()?.AvailableItems ?? changingViewModel.FindItemByType <MessageViewModel>()?.AvailableItems)?.AvailableMessages.Add(viewModel); } void RemoveMessage() { MessageModel messageModel = modifyModel.Modification.OldValue.AssertTypeOf <MessageModel>(); MessageViewModel viewModel = (MessageViewModel)changingViewModel.FindViewItemById(messageModel.Id); changingViewModel.RemoveItem(viewModel); (changingViewModel.FindItemByType <AgentViewModel>()?.AvailableItems ?? changingViewModel.FindItemByType <MessageViewModel>()?.AvailableItems)?.AvailableMessages.Remove(viewModel); } }