【问题标题】:Realm dotnet Nested RealmObject PropertyChanged does not fireRealm dotnet 嵌套 RealmObject PropertyChanged 不会触发
【发布时间】:2018-07-10 00:50:15
【问题描述】:

我用一个方法绑定了 PropertyChanged 事件处理程序,但是,无论我使用 realm.write() 还是使用 ros 修改属性,它都不会触发。

我的模型结构如下:我有一个DeviceList RealmObject,其中包含一个IList<Device> Devices 属性。而Device RealmObject 也有一个嵌套属性People,而People 也是一个RealmObject。 当我使用DeviceList.Devices.SubscribeForNotifications()时,一切正常,在ros中更改People的属性将自动正确地触发通知事件。但是,Device.People.PropertyChanged += (do something); 根本不会触发,Device.PropertyChanged += (do something); 和绑定到Device.People.(Property) 的 UI 也不会更新;但是当我使用断点访问数据时,嵌套的People 中的所有数据都发生了变化。获取嵌套对象更改和更新绑定 UI 的正确方法是什么?

谢谢。

【问题讨论】:

    标签: .net xamarin.forms realm


    【解决方案1】:

    PropertyChanged 事件只会针对对象的顶级属性触发。如果相关对象发生变化,例如:

    foo.PropertyChanged += (s, e) =>
    {
        Console.WriteLine(e.PropertyName);
    };
    
    foo.Bar.Something = 5; // Doesn't trigger anything
    foo.Bar = new Bar(); // Triggers notification
    

    【讨论】:

    • 是的,我尝试了foo.Bar.PropertyChangedfoo.Bar.Something = SomeValue 之类的方法,但属性更改事件仍然没有触发。我有一个IList<Foo>,在list.Add(foo)foo = new Foo(new Bar()) for 循环期间,我添加了foo.Bar.PropertyChangedlist.SubscribeForNotifications 在同样的情况下也能正常工作。
    • 我在同一个项目中使用prism,并且view model中的属性都是使用prismSetProperty()来设置值的,有关系吗?
    • 如果您可以创建一个小型复制案例,请随时在github.com/realm/realm-dotnet/issues 上打开一个问题。这是一个经过良好测试的功能,应该可以工作,因此您的代码可能有错误,但我们可以看看。例如,如果您在循环中添加属性更改处理程序,则您的对象很可能会被垃圾回收,然后将分离任何事件处理程序。
    • 我似乎有同样的嵌套对象属性问题,没有通知更改。这有什么更新吗?你在 Github 上有问题的链接吗?
    • 原因是 OP 让对象被垃圾收集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多