C# Клонирование переменой интерфейса
У меня есть небольшое MVVM приложение. Мне необходимо клонировать ViewModel, чтобы изменения одного не меняло клон этой ViewModel.
MainViewModel
public void AddHistory(IPageViewModel value)
{
IPageViewModel clon = (IPageViewModel)value;
...
}
IPageViewModel
public interface IPageViewModel
{
string Title { get; set; }
string Text { get; set; }
string id { get; set; }
}
Я пытался в MainViewModel добавить интерфейс ICloneable и его реализовать
public void AddHistory(IPageViewModel value)
{
IPageViewModel clon = (IPageViewModel)value.Clone();
...
}
public object Clone()
{
return MemberwiseClone();
}
Но это привело к ошибке:
"IPageViewModel" не содержит определения "Clone", и не удалось найти доступный метод расширения "Clone", принимающий тип "IPageViewModel" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
Реализовать интерфейс ICloneable в IPageViewModel не удалось.
Как правильно клонировать ViewModel?
Ответы (1 шт):
Автор решения: Melkor V
→ Ссылка
Если не хочется ручками писать метод "Клона" данных, можно использовать Json сериализацию и десериализацию. Дженерик метод ниже можно легко использовать.
public static T Clone<T>(T source)
{
var serialized = JsonConvert.SerializeObject(source);
return JsonConvert.DeserializeObject<T>(serialized);
}