public static void UpdateFrom(this ObservableCollection<BookModel> collection, IEnumerable<BookDTO> mergeSource)
{
Execute.OnUIThreadAsync(() =>{
foreach(var bookDTO in mergeSource)
{
var bookModel = collection.FirstOrDefault(model => model.Id == bookDTO.Id);
if(bookModel == null)
{
bookModel = new BookModel
{
Id = bookDTO.Id
};
collection.Add(bookModel);
}
MergeValues(bookModel, bookDTO);
}
var toRemove = collection.Where(orig => mergeSource.Any(merged => merged.Id == orig.Id) == false).ToArray();
foreach(var model in toRemove)
{
collection.Remove(model);
}
});
}