Приношу свои извинения, если я неправильно понимаю вашу проблему ...
Причина, по которой вы, скорее всего, это видите, заключается в том, что объект SelectedDiscount
, к которому вы привязываете каждый ComboBox
, является таким же изменяемым объект. Хотя объект указан в отдельных коллекциях, он является одним и тем же объектом в памяти. Коллекция просто содержит ссылку на SelectedDiscount
объекты в памяти, а не на сам объект.
Например:
var list1 = new List<SelectedDiscount>();
var list2 = new List<SelectedDiscount>();
SelectedDiscount sd = new SelectedDiscount();
list1.Add(sd);
list2.Add(sd);
//Change Collection 1
list1[0].IsNotRelated = true;
//Both collections return true
Console.WriteLine(list1[0].IsNotRelated); //True;
Console.WriteLine(list2[0].IsNotRelated); //True;
Вы не увидите этой проблемы неизменяемые объекты, такие как string
, так как они не могут измениться. Каждая коллекция будет создавать свою собственную версию объекта, а не ссылку, как у mutable объекта.
По сути, вам потребуется создать новый экземпляр объекта SelectedDiscount
в памяти, чтобы модифицировать один без изменения другого.
Один из способов сделать это - реализовать ICloneable
на ваш класс.
public class SelectedDiscount : ICloneable
{
[JsonIgnore]
public bool IsNotRelated
{
get { return _isNotRelated; }
set
{
_isNotRelated = value;
RaisePropertyChangedEvent("IsNotRelated");
}
}
public object Clone()
{
return this.MemberwiseClone();
}
}
Теперь вы можете клонировать объект в новую коллекцию.
var list1 = new List<SelectedDiscount>();
var list2 = new List<SelectedDiscount>();
//Assuming the IsNotRelated property is defaulted to false.
SelectedDiscount sd = new SelectedDiscount();
list1.Add(sd);
list2.Add((SelectedDiscount)sd.Clone());
//Change Collection 1
list1[0].IsNotRelated = true;
//Only the first collection will return true
Console.WriteLine(list1[0].IsNotRelated); //True;
Console.WriteLine(list2[0].IsNotRelated); //False;
Вы можете также реализовать свои собственные способы клонирования, так как иногда ICloneable
может не работать в зависимости от структуры класса. Я просто хотел привести вам пример, но теперь, когда вы знаете, ПОЧЕМУ он ведет себя так, как есть, вы можете решить эту проблему.
С наилучшими пожеланиями!