Versi pendek:

Saya memiliki dua koleksi: IEnumerable dan ObservableCollection. Saya perlu cara untuk menjaga mereka tetap sinkron. Itu berarti, jika ada item yang ditambahkan, dihapus, atau diperbarui dalam satu item, item tersebut dan hanya item tersebut yang akan ditambahkan, dihapus, atau diperbarui secara otomatis di item lainnya juga. Bagaimana ini bisa dilakukan?

Versi panjang: Saya menggunakan Entity Framework dengan WPF. Karena saya menerapkan pola repositori dengan MVVM, ViewModel hanya mendapatkan IEnumerable entitas. Saya ingin mereka dikonversi ke ObservableCollection tanpa kehilangan kemampuan change tracking yang disediakan oleh Entity Framework.

Saya telah menjelajahi internet untuk mencari solusinya, tetapi sia-sia. Apakah ada cara untuk melakukannya dengan benar?

0
Nibaron Chakraborty 15 Maret 2017, 03:41

2 jawaban

Jawaban Terbaik

Dalam kasus umum, tidak ada solusi umum untuk masalah tersebut.

Yang mengatakan. Anda tidak menggunakan IEnumerable. Anda menggunakan DbSet<T>, yang mengekspos public ObservableCollection<T> Local { get; }. Larutan. Jangan sinkronkan dua koleksi. Cukup gunakan koleksi yang benar untuk memulai.

EDIT kembali pertanyaan:

Saya akan memperbaiki kode Anda sehingga "Repositori" adalah Koleksi.

public class FooRepository
    : ICollection<Foo>
    , INotifyCollectionChanged
{
    private BarDbContext _context;

    public FooRepository()
    {
        _context = new BarDbContext();
        _context.Foos.Local.CollectionChanged += (o, e) => CollectionChanged(this, e);
    }
    //Delegate ICollection to _context.Foos.Local
    public Foo this[int index] { get { return _context.Foos.Local[index]; } }

    public Task Load(Expression<Foo, bool> predicate)
    {
        return _context.Foos.Where(predicate).LoadAsync();
    }
}
3
Aron 15 Maret 2017, 07:16