У меня есть корневой список строк в ReactiveList<string>
private ReactiveList<string> Items { get; set; }
и производный список
private IReactiveDerivedList<string> _FilteredItems;
public IReactiveDerivedList<string> FilteredItems{ get => _FilteredItems; set => this.RaiseAndSetIfChanged(ref _FilteredItems, value); }
У меня также есть термин фильтра, который изменяется при вводе пользователем вa TextBox
private string _FilterTerm;
public string FilterTerm { get => _FilterTerm; set => this.RaiseAndSetIfChanged(ref _FilterTerm, value); }
Наконец, в конструкторе я использую следующее, которое воссоздает производный список каждый раз, когда FilterTerm
меняет
this.WhenAnyValue(This => This.FilterTerm).Where(filterTerm => filterTerm != null).Subscribe((filterTerm) =>
{
FilteredItems = Items.CreateDerivedCollection(x => x, x => x.Contains(FilterTerm));
});
..Я делаю это правильно, или есть лучший способ, так как это похоже на «Я мог бы просто создать новый ReactiveList
каждый раз, зачем беспокоиться с IReactiveDerivedList
»?
ОБНОВЛЕНИЕ
Я нашел следующий пример, который почти работает для меня, https://janhannemann.wordpress.com/2016/10/18/reactiveui-goodies-ireactivederivedlist-filtering-2/,, но он требует, чтобы я добавил свойство IsFiltered
в свою ViewModel, но вв этом случае я не использую ViewModel, я просто использую string
!