Используя коллекцию NavigationParameters в Prism, мы передаем объект [...] [Выделить мое]
Вы устанавливаете объект в NavigationParameters
.Экземпляры классов (объектов) передаются по ссылке в C #, экземпляры структур передаются по значению.Для структур существует семантика для копирования и сравнения значений (т. Е. Все открытые свойства копируются и сравниваются соответственно), но для классов аналогичная семантика отсутствует.
См. Документацию :
Поскольку классы являются ссылочными типами, переменная объекта класса содержит ссылку на адрес объекта в управляемомкуча.Если второй объект того же типа назначен первому объекту, то обе переменные ссылаются на объект по этому адресу.
Чтобы предотвратить обновление исходного объекта, вам придется скопировать объект до того, как им манипулируют (я скопировал бы его перед передачей, но вы также можете скопировать его на целевом сайте).Если ваш класс содержит только свойства типа значения, будет достаточно мелкой копии, т.е. вы создаете метод (или свойство, но это может вводить в заблуждение), который возвращает новый объект вашего класса со всеми скопированными значениями
class MyClass
{
int Value1 { get; set; }
float Value2 { get; set; }
public MyClass Copy()
{
var copy = new MyClass()
{
Value1 = this.Value1,
Value2 = this.Value2
}
return copy;
}
}
Если ваш объект сам содержит ссылочные типы, вам, возможно, придется создать глубокую копию
class MyClass
{
MyClass2 Reference { get; set; }
public MyClass Copy()
{
var copy = new MyClass()
{
Reference = this.Reference.Copy()
}
return copy;
}
}
Конечно, им также придется реализовать метод Copy()
.