XAML пейджера данных и сетки данных, в которой показана коллекция:
<syncfusion:SfDataGrid ItemsSource="{Binding ElementName=dataPager,Path=PagedSource}"
ColumnSizer="Auto"/>
<syncfusion:SfDataPager x:Name="dataPager"
Source="{Binding Orders,IsAsync=True}"
PageSize="30"
HorizontalAlignment="Center"/>
У меня есть окно поиска, когда я пишу что-то в поле поиска, моя коллекция фильтруется относительно текста, который я пишу в окне поиска.
SourceList<Order> ordersList;
public JournalViewModel(NorthwindContext northwindContext)
{
ordersList = new SourceList<Order>();
//Filling of Orders collection
ordersList.Connect().
ObserveOnDispatcher().
Bind(out _ordersList).
Subscribe();
//When I write something in the search box this code runs
this.WhenAnyValue(x => x.SearchTerm).
Subscribe(newSearchTerm =>
{
if (string.IsNullOrEmpty(newSearchTerm))
{
//Logic of reloading collection
}
else
{
//Logic of filtering collection
}
});
}
//Source property of Text property of search box
public string SearchTerm
{
get { return _searchTerm; }
set { this.RaiseAndSetIfChan ged(ref _searchTerm, value); }
}
ReadOnlyObservableCollection<Order> _ordersList;
public ReadOnlyObservableCollection<Order> Orders => _ordersList;
Таким образом, каждый раз, когда моей коллекцией манипулируют, пейджер данных останавливается, чтобы показать мою коллекцию. Почему это происходит и как заставить пейджер данных показывать отфильтрованную коллекцию?
Может быть полезно: Изначально у меня была проблема с отображением самой коллекции, потому что моя коллекция заполнялась посредством реактивного запроса. Я решил эту проблему, установив свойство привязки IsAsyn c в true.
EDIT 16.03.2020: например, если мне нужно очистить коллекцию, в которой хранится 830 элементов, а затем заполнить ее с новыми элементами я использую методы Clear
и AddRange
из DynamicData, SfDataPager не показывает отфильтрованную коллекцию. Но если я использую конструкцию foreach
:
foreach (var order in currentList)
ordersList.Remove(order);
foreach (var order in newList)
ordersList.Add(order);
Пейджер данных показывает мне отфильтрованную коллекцию. Почему это происходит?