В программе используется простенький UserControl (модальное окно), в котором редактируется коллекция цветовых меток.
Сама коллекция выглядит следующим образом:
public static ObservableCollection<ColorVM> Colors { get; set; } = new ObservableCollection<ColorVM>()
{
new ColorVM {Title = "Green", Value = "#a0db8e"},
new ColorVM {Title = "Red", Value = "#b44545"},
new ColorVM {Title = "Orange", Value = "#e28356"},
new ColorVM {Title = "Blue", Value = "#2b90f5"}
};
Мне не понятно как реализовать метод кнопки Cancel, чтобы все изменения в коллекции откатывались на момент до начала редактирования.
Была мысль реализовать ICloneable у ColorVM и копировать всю исходную коллекцию для редактирования в UserControl. Но я не уверен в правильности такого подхода.
Подскажите, как правильно такое реализуется?
Да, клонирование — правильный подход.
Когда вы открываете ваш объект на редактирование, вы создаёте его клон. Есть два подхода:
При втором подходе остальные части программы видят изменения в редактируемом объекте прямо во время редактирования, так что этот подход сейчас, кажется, более модный.
Если коллекция большая (скажем, десятки или сотни тысяч элементов), имеет смысл подумать об оптимизации. Можно хранить не две копии коллекции, а одну, и набор операций редактирования в виде объектов, представляющих операции: добавление элемента, удаление, замена одного элемента на другой. Но этим не стоит заморачиваться пока производительность простого подхода остаётся нормальной.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости