/// <summary> /// Add new contact or update existing contact, and save to file /// </summary> public void AddOrUpdate(ContactItemModel contact, bool userNameInStandardFormat) { var catName = userNameInStandardFormat ? contact.LastName[0].ToString().ToUpper() : contact.FirstName[0].ToString().ToUpper(); if (contact.ID == -1) { // Update contact var id = SqLiteManager.AddOrUpdateContact(contact); contact.ID = id; contact.Category = GetCategory(catName); Items.Add(contact); RaiseCollectionChange( contact, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } else { foreach (var item in Items) { if (item.ID == contact.ID) { var newCatName = userNameInStandardFormat ? contact.LastName[0].ToString().ToUpper() : contact.FirstName[0].ToString().ToUpper(); item.EmailAddress = contact.EmailAddress; item.EmailAddress2 = contact.EmailAddress2; item.FirstName = contact.FirstName; item.LastName = contact.LastName; item.PhoneNumber = contact.PhoneNumber; item.PhoneNumber2 = contact.PhoneNumber2; item.Category = GetCategory(newCatName); item.ImagePath = contact.ImagePath; RaiseCollectionChange( contact, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); SqLiteManager.AddOrUpdateContact(contact); return; } } throw new IndexOutOfRangeException($"Contact ID {contact.ID} not found"); } }