【发布时间】:2018-10-04 13:10:52
【问题描述】:
我正在尝试在ListView 上实现过滤和分页。我设法进行了过滤,但我观察到当我从集合中添加/删除项目时 UI 没有更新。
这是我的设置: XAML:
<ListView
ItemsSource="{Binding SourceCollection, UpdateSourceTrigger=Explicit}"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
虚拟机端:
private CollectionViewSource _usersCollection;
导演
_usersCollection = new CollectionViewSource {Source = UsersCollection};
_usersCollection.Filter += usersCollection_Filter;
道具:
public ICollectionView SourceCollection => _usersCollection.View;
public List<User> UsersCollection => LiteDbHelper.GetAllUsers();
然后,当我添加新项目时,我尝试Refresh() 集合(SourceCollection 和_usersCollection)没有运气,还尝试在UsersCollection 上RaisePropertyChanged,再次没有运气。 UI 与第一次创建时保持一致。
附:我正在将记录添加到文件数据库 (LiteDB),然后我需要从数据库中检索它们并更新 UI。这一直有效,直到我开始使用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;
}
在 add 方法上,我刚刚使用了这些行并且它起作用了:
var allUsers = LiteDbHelper.GetAllUsers();
_usersCollectionDB.Clear();
_usersCollectionDB.AddRange(allUsers);
_usersCollection.View.Refresh();
【问题讨论】:
-
如何检索记录并更新源集合?
-
有了这个:LiteDbHelper.GetAllUsers,一开始我只提升了属性来获取新值,但现在使用 ICollectionView 它不再起作用了
-
您需要重置 Source 属性。请发布您的代码。
-
我清理了我的虚拟机以便只包含这个问题的内容:pastebin.com/vpi7VqVS AddUserMethod - 当我向数据库添加新用户时调用
-
您还没有发布任何 AddUserMethod。请在此处发布代码的相关部分,而不是引用一些外部链接。
标签: c# wpf listview collectionviewsource icollectionview