void OnUpdate(object sender, ListModelEventArgs <DataModelType> e) { if (CanUpdateList()) { var itemsFromModel = _model.GetItems().ToList(); //добавляем те элементы, которые были добавленны в процессе редактирования var addedItems = addedAndDelatedItems.Where(itm => itm.Value == ChangeStatus.Add).Select(itm => itm.Key).ToList(); itemsFromModel.AddRange(addedItems); //удаляем элементы, которые были удалены, чтобы они не отображались var deletedItems = addedAndDelatedItems.Where(itm => itm.Value == ChangeStatus.Delete).Select(itm => itm.Key).ToList(); foreach (var delItem in deletedItems) { itemsFromModel.Remove(delItem); } var newItemViewModels = GetItemViewModels(itemsFromModel); UpdateList(newItemViewModels); } }
public ListViewModel(IListModel <DataModelType> model, IViewModelCreator <DataModelType, DataViewModelType, DataDetailViewModelType> creator, IItemModelAdapterCreator <DataModelType> itemModelCreator) { if (creator == null) { throw new ArgumentNullException("creator can't be null"); } _creator = creator; if (itemModelCreator == null) { throw new ArgumentNullException("itemModelCreator can't be null"); } _itemModelCreator = itemModelCreator; if (model == null) { throw new ArgumentNullException("model can't be null"); } _model = model; _model.Updated += OnUpdate; var itemViewModels = GetItemViewModels(_model.GetItems()); UpdateList(itemViewModels); AddItemCommand = new AddItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); DeleteItemCommand = new DeleteItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); EditListCommand = new EditListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); SaveListCommand = new SaveListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); SelectItemCommand = new SelectItemCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); UpdateListCommand = new UpdateListCommand <DataModelType, DataViewModelType, DataDetailViewModelType>(this); addedAndDelatedItems = new Dictionary <IItemModelAdapter <DataModelType>, ChangeStatus>(); IsSaved = true; }