Я создаю элемент управления в формах xamarin, который привязывается к списку объектов.Чтобы заставить эту привязку работать, мне нужно использовать наблюдаемые коллекции (в противном случае методы с измененным свойством не срабатывают).
Я заметил действительно расстраивающее взаимодействие в результате необходимости использовать OC вместо списков.Всякий раз, когда обновляется связанный OC, значения в моих элементах управления автоматически обновляются, даже если они являются просто ссылками на OC. Вот как я копирую OC.
//Internal list of events
private List<EventItem> _events;
void OnEventsChanged(ObservableCollection<EventItem> eventsCollection)
{
//Error handle
List<EventItem> events = eventsCollection.ToList();
//Do something
_events = events;
}
Проблема возникает при обновлении OCЯ хочу проверить новые / удаленные И измененные объекты.Проблема в том, что при обновлении OC также обновляется внутренний список (_events
).Это означает, что когда я делаю сравнение между старыми и новыми значениями, они совпадают.
Честно говоря, я не очень понимаю, как c # обрабатывает копирование ссылок на объекты вокруг, у меня была похожая проблема некоторое время назадпри вычислении DateTime.Now
в отличие от копирования значения уже инициализированного объекта.
var time = DateTime.Now;
await Task.Delay(1000);
var time2 = time; //This is 1 second later than time, not the value of time (which is what I wanted)
Я использовал Objective-C в прошлом, и у него есть концепция MutableCopy
, где вы можете назначитьновый список из существующего, они имеют те же значения, но не связаны между собой.
Как я могу сделать это в C #, чтобы мой внутренний список элементов управления обновлялся только мной, а не OC?
Спасибо