using System.Collections.ObjectModel; using System.ComponentModel; using System.Reactive.Linq; using System.Reactive.Subjects; using DynamicData; namespace ModpackUpdater.Apps.Manager.Ui.Models; public class DynamicDataView : INotifyPropertyChanged where T : notnull { public event PropertyChangedEventHandler? PropertyChanged; private string? searchText; private readonly Subject searchTextSubject = new(); public SourceList List { get; } = new(); public ReadOnlyObservableCollection View { get; } public DynamicDataView(Func> predicate) { List.Connect() .Filter(searchTextSubject/*.Throttle(TimeSpan.FromMilliseconds(250))*/.Select(predicate)) .Bind(out var view) .Subscribe(); searchTextSubject?.OnNext(searchText); View = view; } public string? SearchText { get => searchText; set => searchTextSubject.OnNext(searchText = value); } }