Realm dotnet Вложенный объект RealmObject PropertyChanged не срабатывает

Я связал обработчик события PropertyChanged с методом, однако он вообще не срабатывает, независимо от того, использую ли я realm.write() или ros для изменения свойств.

Структура моих моделей такова: у меня есть DeviceList RealmObject, который включает свойство IList<Device> Devices. И Device RealmObject также имеет вложенное свойство People, а People также является RealmObject. Когда я использую DeviceList.Devices.SubscribeForNotifications(), все работает нормально, изменения свойств People в ros автоматически и правильно вызывают событие уведомления. Однако Device.People.PropertyChanged += (do something); вообще не срабатывает, ни Device.PropertyChanged += (do something);, ни привязка пользовательского интерфейса к Device.People.(Property) также не обновляются; но все данные во вложенном People изменились, когда я использовал точку останова для доступа к данным. Как правильно получить изменения вложенного объекта и обновить пользовательский интерфейс привязки?

Спасибо.


person Haoyuan Tang    schedule 31.01.2018    source источник


Ответы (1)


Событие PropertyChanged будет срабатывать только для свойств верхнего уровня ваших объектов. Если связанный объект изменяется, например:

foo.PropertyChanged += (s, e) =>
{
    Console.WriteLine(e.PropertyName);
};

foo.Bar.Something = 5; // Doesn't trigger anything
foo.Bar = new Bar(); // Triggers notification
person Nikola Irinchev    schedule 31.01.2018
comment
Да, я пробовал что-то вроде foo.Bar.PropertyChanged и foo.Bar.Something = SomeValue, но событие изменения свойства по-прежнему не срабатывает. У меня есть IList<Foo>, во время цикла list.Add(foo) и foo = new Foo(new Bar()) for я добавил foo.Bar.PropertyChanged. И list.SubscribeForNotifications отлично работает в том же случае. - person Haoyuan Tang; 02.02.2018
comment
Я использую призму в том же проекте, а свойства в модели представления используют призму SetProperty() для установки значения, имеет ли это значение? - person Haoyuan Tang; 02.02.2018
comment
Если вы можете создать небольшой репро-кейс, не стесняйтесь открывать проблему на github.com/realm/ область-точка/вопросы. Это хорошо протестированная функция, которая должна работать, поэтому, скорее всего, это ошибка в вашем коде, но мы можем проверить. Например, если вы добавляете обработчики изменения свойств в цикле, вполне вероятно, что ваши объекты будут удалены сборщиком мусора, который затем отключит любые обработчики событий. - person Nikola Irinchev; 02.02.2018
comment
Кажется, у меня такая же проблема со свойствами вложенного объекта, не уведомленного об изменениях. Любое обновление в этом? У вас есть ссылка на проблему на Github? - person Munk; 09.05.2018
comment
Причина заключалась в том, что OP позволял объектам собирать мусор. - person Nikola Irinchev; 09.05.2018
comment
Извините... Но что вы подразумеваете под "ОП"? - person Munk; 09.05.2018
comment
Извините, если это было расплывчато, я имел в виду оригинальный постер, то есть автора вопроса. - person Nikola Irinchev; 09.05.2018