假设此数据模型基于realm.io:
public class JournalEntry : RealmObject {
...
}
public class JournalOwner : RealmObject {
...
public RealmList<JournalEntry> Entries { get; }
}
我有 JournalEntriesPage ,它显示 JournalOwner 的所有 JournalEntry 项目的 ListView 。
在相应的视图模型中,我将 JournalOwner 传递给构造函数,并将 JournalOwner.Entries 分配给属性条目。
public class JournalEntriesViewModel {
private Realm _realm;
private JournalOwner _owner;
public RealmList<JournalEntry> Entries {
get { return _owner.Entries; }
}
....
public JournalEntriesViewModel( JournalOwner owner ) {
_realm = Realm.GetInstance();
_owner = owner;
AddEntryCommand = new Command(AddEntry);
DeleteEntryCommand = new Command<JournalEntry>(DeleteEntry);
}
如果我通过用户界面添加 JournalEntry ,它会被创建,但不会出现在 ListView 中。
如果我向上移动导航(到 JournalOwner )然后向下移动到所有者的条目, ListView 会显示新创建的 JournalEntry
不知何故, JournalEntry 的 ListView 不知道新创建的JournalEntry。
JournalEntriesPage 像这样绑定ListView:
<ListView
ItemsSource="{Binding Entries}"
x:Name="EntriesListView"
ItemTapped="OnItemTapped"
ItemSelected="OnItemSelected" >
如何管理ListView立即显示新创建的条目?
我觉得,我以某种方式需要通知观察者(?)其值的变化。
在相应的情况下,更改
的条目Owners = _realm.All<JournalOwner>();
强制相应的ListView立即更改。
答案 0 :(得分:1)
RealmList<T>
没有像{Jason指出的那样实现INotifyCollectionChanged
,因此无法通知ListView更改。您最好的选择是手动重新加载ListView中的数据。
RealmResults<T>
会实现INotifyCollectionChanged
(尽管围绕will soon change slightly的API)。这就是为什么绑定到_realm.All<JournalOwner>()
的ListView会根据数据库中的更改进行更新的原因。
可观察列表的底层基础架构是there,它在C#级别暴露之前只是时间问题。