Вот мое требование (ради этого вопроса я упрощаю вещи). У меня есть список людей, идентифицированных по имени и фамилии. Список хранится в файле XML. Мне нужно построить приложение WPF, которое состоит из двух окон: в главном окне отображается список. Ничего особенного, просто список с именем и фамилией.
Три кнопки внизу: Добавить, Изменить, Удалить.
При нажатии кнопки «Удалить» выбранная строка навсегда удаляется из файла.
При нажатии кнопки «Добавить» или «Изменить» появляется второе окно (диалоговое окно), в котором вы можете соответственно ввести нового человека, введя его имя и фамилию, или изменить и сохранить существующую запись.
Как правильно построить это приложение в MVVM? Вот конкретные вопросы, которые у меня есть:
1) С точки зрения MVVM я не могу связываться напрямую с источником данных XML, или я могу? Поэтому я должен создать объект Person, который реализует INotifyPropertyChange, а затем сохранить группу этих объектов в ObservableCollection. Соответственно, мне нужно написать код, который читает XML-файл и преобразует его в набор объектов, и наоборот, когда мне нужно сохранить изменения обратно в файл. Я прав?
2) Куда поместить реализацию метода «Persist», которая фактически сохраняется в файл XML? Есть два места, где этот метод будет вызываться: нажать кнопку «Удалить» в главном окне или кнопку «ОК» в окне «Добавить / изменить».
3) Обратите внимание, что одно и то же окно обрабатывает Add и Edit, как мне правильно реализовать это окно MVVM? Как мне отобразить заголовок этого окна «Добавить» или «Редактировать» соответственно, не прибегая к уродливым операторам, если я код позади? К чему я привязываю два текстовых поля, которые у меня есть (имя и фамилия). Также обратите внимание, что в окне «Добавить / редактировать» есть кнопки «ОК» и «Отмена», изменения не будут приняты до тех пор, пока не будет нажата кнопка «ОК», и если нажать кнопку «Отмена», изменения должны быть отменены. Одним из возможных решений, которое я вижу, является клонирование объекта Person, а не связывание непосредственно с тем же объектом, с которым связан список, так что в списке не отображаются изменения, пока не будет нажата кнопка ОК, но это сложно, поскольку мне нужно написать код для копирования свойств туда и обратно , Есть ли лучший способ сделать это в MVVM?
Заранее благодарен
Генри