Я пытаюсь реализовать фильтрацию и подкачку на ListView
.Мне удалось выполнить фильтрацию, но я заметил, что пользовательский интерфейс не обновляется при добавлении / удалении элементов из коллекции.
Вот мои настройки: XAML:
<ListView
ItemsSource="{Binding SourceCollection, UpdateSourceTrigger=Explicit}"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
Сторона VM:
private CollectionViewSource _usersCollection;
CTOR
_usersCollection = new CollectionViewSource {Source = UsersCollection};
_usersCollection.Filter += usersCollection_Filter;
Реквизиты:
public ICollectionView SourceCollection => _usersCollection.View;
public List<User> UsersCollection => LiteDbHelper.GetAllUsers();
Затем, когда я добавляю новый элемент, я попытался Refresh()
коллекции (и SourceCollection
, и _usersCollection
) безуспешно, также попытался RaisePropertyChanged
на UsersCollection
, снова без удачи,Пользовательский интерфейс остается таким же, как при первом создании.
PS Я добавляю записи в файловую БД (LiteDB), а затем мне нужно извлечь их из БД и обновить пользовательский интерфейс.Это работало до тех пор, пока я не начал использовать ICollectionView
.
Любые подсказки?
Обновление: мне удалось исправить эту проблему с помощью следующего кода:
Изменено свойство, котороекормил CollectionViewSource
:
private ObservableCollection<User> _usersCollectionDB = new ObservableCollection<User>();
public ObservableCollection<User> UsersCollection
{
get
{
if (_usersCollectionDB.Count == 0)
{
var allUsers = LiteDbHelper.GetAllUsers();
_usersCollectionDB.AddRange(allUsers);
return _usersCollectionDB;
}
return _usersCollectionDB;
}
set => _usersCollectionDB = value;
}
и по методу добавления я только что использовал эти строки, и это сработало:
var allUsers = LiteDbHelper.GetAllUsers();
_usersCollectionDB.Clear();
_usersCollectionDB.AddRange(allUsers);
_usersCollection.View.Refresh();