2016-05-26 7 views
0

realm.ioに基づいて、このデータモデルを仮定します更新のListView>

public class JournalEntry : RealmObject { 
     ... 
} 

public class JournalOwner : RealmObject { 
     ... 
     public RealmList<JournalEntry> Entries { get; } 
} 

私はJournalOwnerのすべてJournalEntry項目のリストビューを示しJournalEntriesPageを、持っています。対応するビューモデルの内部

、Iは、コンストラクタに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); 

    } 

私はUIを介しJournalEntryを追加した場合、それが作成されますが、ListViewのには表示されません。

私は(JournalOwnerに)ナビゲーションを上に移動して、所有者のエントリまで、リストビューは、新しく作成されたJournalEntryを示しています。

どういうわけか、リストビューJournalEntry秒のは、新しく作成されたJournalEntryについて知りません。

JournalEntriesPageはそうのようなリストビューをバインドします

<ListView 
    ItemsSource="{Binding Entries}" 
    x:Name="EntriesListView" 
    ItemTapped="OnItemTapped"  
    ItemSelected="OnItemSelected" > 

は、どのように私はListViewコントロールがすぐに新しく作成されたエントリを表示疥癬のですか?

私は何とかそのオブザーバーのオブザーバー(?)にその値が変更されたことを知らせる必要があると感じます。対応する状況では

Owners = _realm.All<JournalOwner>(); 

のエントリへの変更はすぐに変更するには、対応するリストビューを強制的に行います。

+2

RealmListは、ListViewに更新を通知するために変更されたINotifyCollectionを実装する必要があります。 – Jason

+0

@Jason別のクラスで_realm.All ()の変更がListViewに反映される場合、RealmListはINotifyCollectionを実装していませんか? – SteAp

+0

Realmにはまだ手を加えていませんが、私は確信が持てません – Jason

答えて

1

RealmList<T> @ Jasonが指摘しているように、INotifyCollectionChangedが実装されていないため、ListViewに変更を通知できません。最善の策は、リストビュー内のデータを手動でリロードすることです。

RealmResults<T>は、INotifyCollectionChanged(ただし、その周辺のAPIはwill soon change slightlyですが)を実装しています。そのため、リストビューは_realm.All<JournalOwner>()にバインドされ、データベースの変更に応じて更新されます。

観測可能なリストの基盤となるインフラストラクチャはthereです。これはC#レベルで公開されるまでの時間です。

+0

それは私が探しているものです。 JournalEntryDetailsPageの内部。 ListViewでデータをリロードするにはどうすればよいですか?または、ListViewのバインディング・ソースとして別のタイプを使用できますか?しかし、どのタイプ? – SteAp

+0

私はそれがばかげているかもしれませんが、 'JournalEntriesViewModel'に' INotifyPropertyChanged'を実装し、 'Entries'プロパティのために' PropertyChanged'イベントを発生させるとListViewが強制的に再バインドされるはずです。 – Tayschrenn

関連する問題