В программе используется простенький 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
. Но я не уверен в правильности такого подхода.
Подскажите, как правильно такое реализуется?
Да, клонирование — правильный подход.
Когда вы открываете ваш объект на редактирование, вы создаёте его клон. Есть два подхода:
При втором подходе остальные части программы видят изменения в редактируемом объекте прямо во время редактирования, так что этот подход сейчас, кажется, более модный.
Если коллекция большая (скажем, десятки или сотни тысяч элементов), имеет смысл подумать об оптимизации. Можно хранить не две копии коллекции, а одну, и набор операций редактирования в виде объектов, представляющих операции: добавление элемента, удаление, замена одного элемента на другой. Но этим не стоит заморачиваться пока производительность простого подхода остаётся нормальной.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть сервер на С# и клиент на скриптеДанные от сервера отправляются хорошо, а вот с приемом разобраться не могу