Фильтрация ObservableCollection с сохранением привязки к контексту EF Core
Доброе время суток. Есть класс Card
который реализует интерфейс INotifyPropertyChanged
, который хранится в бд, данные из бд передаю в ObservableCollection
. Как реализовать фильтрацию по этой коллекции с сохранением привязки, т.е. если я добавлю, удалю, редактирую через контекст бд, то это автоматически изменяло ObservableCollection и отображалось во View????
public class Card : INotifyPropertyChanged
{
public int Id { get; set; }
private string? _name;
public string? Name
{
get { return _name; }
set
{
_name = value;
OnProperyChanged("Name");
}
}
private string? _description;
public string? Description
{
get { return _description; }
set
{
_description = value;
OnProperyChanged("Description");
}
}
public event PropertyChangedEventHandler? PropertyChanged;
public void OnProperyChanged([CallerMemberName] string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public class ApplicationContext : DbContext
{
public DbSet<Card> Cards { get; set; } = null!;
public ApplicationContext() => Database.EnsureCreated();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source = database.db");
}
}
public class CardViewModel
{
ApplicationContext db;
public ObservableCollection<Card> Cards { get; set; }
public CardViewModel()
{
db = new ApplicationContext();
db.Cards.Load();
Cards = new ObservableCollection<Card>(db.Cards.Local.Where(card => card.Id > 10));
}
}
Code behind:
public partial class CardsWindow : Window
{
public CardsWindow()
{
InitializeComponent();
DataContext = new CardViewModel();
}
}
В View привязываю так:
<ListBox x:Name="cardsListBox"
ItemsSource="{Binding Cards}">
</ListBox>
Если данные передавать в Cards
через db.Cards.Local.ToObservableCollection()
, такой метод работает, но как фильтровать потом не понятно.