public UpdatePersonPage(int id)
     : this()
 {
     using (var service = new PhoneBookCRUDService())
     {
         _Person = service.GetPersonById(id);
     }
 }
 private void bDelete_Click(object sender, RoutedEventArgs e)
 {
     if(!String.IsNullOrWhiteSpace(tbPersonId.Text))
     {
         using (var service = new PhoneBookCRUDService())
         {
             service.RemovePersonById(Int32.Parse(tbPersonId.Text));
         }
     }
     PageSwitcher.Switch(new PeopleListPage());
 }
        private void bSave_Click(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrWhiteSpace(tbFirstName.Text))
            {
                MessageBox.Show("Поле 'Имя' должно быть заполнено!");
                return;
            }

            if (_PhoneNumberItems.FirstOrDefault(x => String.IsNullOrWhiteSpace(x.Number)) != null)
            {
                MessageBox.Show("Поле 'Телефон' должно быть заполнено!");
                return;
            }

            var fullPath = iPersonImage.Source.ToString().Remove(0, 8);
            var name = fullPath.Split('/').Last();
            var projectPath = Environment.CurrentDirectory;
            var newFilePath = "PeopleImages/" + name;

            if (!File.Exists(newFilePath))
            {
                File.Copy(fullPath, projectPath + '/' + newFilePath);
            }

            var person = new Person(
                tbFirstName.Text,
                tbLastName.Text,
                tbPatronymic.Text,
                newFilePath);

            person.AddPhones(_PhoneNumberItems
                .Where(x => !String.IsNullOrWhiteSpace(x.Number))
                .Select(x => _PhoneNumberConverter.Convert(x))
                .ToList());

            try
            {
                using (var service = new PhoneBookCRUDService())
                {
                    service.AddPerson(person);
                }
            }
            catch (DuplicatePersonNameException ex)
            {
                MessageBox.Show("Контакт с таким именем уже существует!");
                return;
            }

            PageSwitcher.Switch(new PeopleListPage());
        }
        private void FillForm()
        {
            PhoneBookCRUDService service = new PhoneBookCRUDService();

            var person = service.GetPersonById(_personId);

            tbPersonId.Text = person.Id.ToString();
            lFirstName.Content = person.FirstName;
            lLastName.Content = person.LastName;
            lPatronymic.Content = person.Patronymic;

            var uri = new Uri(person.ImagePath, UriKind.Relative);
            iPersonImage.Source = (ImageHelper.GetImageFromUri(uri)).Source;
            
            foreach(var number in person.PhoneNumbers)
            {
                lbNumbers.Items.Add(number);
            }
        }
        private void FillPeopleList()
        {
            List<Person> people;
            using (var service = new PhoneBookCRUDService())
            {
                people = service.GetAllPeople();
            }

            foreach (var person in people.OrderBy(x => x.FullName))
            {
                var uri = new Uri(person.ImagePath, UriKind.Relative);

                PeopleList.Items.Add(
                    new PersonListItem(
                        person.Id,
                        ImageHelper.GetImageFromUri(uri), 
                        person.FullName));
            }
        }
        private void bSave_Click(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrWhiteSpace(tbFirstName.Text))
            {
                MessageBox.Show("Поле 'Имя' должно быть заполнено!");
                return;
            }

            if (_PhoneNumberItems.FirstOrDefault(x => String.IsNullOrWhiteSpace(x.Number)) != null)
            {
                MessageBox.Show("Поле 'Телефон' должно быть заполнено!");
                return;
            }

            var fullPath = iPersonImage.Source.ToString().Remove(0, 8);
            var name = fullPath.Split('/').Last();
            var projectPath = Environment.CurrentDirectory;
            var newFilePath = "PeopleImages/" + name;

            if (!File.Exists(newFilePath))
            {
                File.Copy(fullPath, projectPath + '/' + newFilePath);
            }

            _Person.FirstName = tbFirstName.Text;
            _Person.LastName = tbLastName.Text;
            _Person.Patronymic = tbPatronymic.Text;
            _Person.ImagePath = newFilePath;

            try
            {
                using (var service = new PhoneBookCRUDService())
                {
                    var oldPhones = _Person.PhoneNumbers;
                    foreach (var phone in oldPhones)
                    {
                        if (_PhoneNumberItems.SingleOrDefault(x => x.Id == phone.Id) == null)
                        {
                            service.DeleteNumber(phone);
                        }
                    }

                    foreach (var phone in _PhoneNumberItems)
                    {
                        var blPhone = _PhoneNumberConverter.Convert(phone);
                        blPhone.SetPerson(_Person.Id);

                        if (blPhone.Id == 0)
                        {
                            service.AddNumber(blPhone);
                        }
                        else
                        {
                            service.UpdateNumber(blPhone);
                        }
                    }
                    service.UpdatePerson(_Person);
                }
            }
            catch (DuplicatePersonNameException ex)
            {
                MessageBox.Show("Не удалось обновить данные о контакте!Такие данные уже существуют!");
                return;
            }

            PageSwitcher.Switch(new PeopleListPage());
        }