My CollectionViewSource 未拾取更改
本文关键字:CollectionViewSource My | 更新日期: 2023-09-27 18:30:41
我有一个ListView,我在代码后面绑定到CollectionViewSource:
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource);
collectionView.SortDescriptions.Clear();
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
表视图是列表视图,属性名称是我要排序的列的名称,方向是升序或降序。
XAML 具有以下项源:
ItemsSource="{Binding Rows}"
隐藏的代码具有以下
行:List<TableRow> rows;
public List<TableRow> Rows
{
get { return rows; }
set
{
rows = value;
UpdateProperty("Rows");
}
}
更新如下:
public void Update()
{
...generate a list of rows...
Rows = ...rows...
}
调用 Update 时出现问题,列表视图确实会更新,但丢失以前在 CollectionViewSource 上的排序集。
如果您正在"新建"行,则前几行上的任何设置都将消失。 如果您清除(不是新的)行,那么我认为它们将保留该设置。
而且您甚至不希望更新行 = 行。然后分配行后。
NotifyPropertyChange("Rows");
所以 UI 知道更新
如果您要新建,请重新分配
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource);
collectionView.SortDescriptions.Clear();
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
或
private List<TableRow> rows = new List<TableRow>();
并拥有你唯一的地方 新它
答案是在更新后重新应用排序描述,如下所示:
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource);
collectionView.SortDescriptions.Clear();
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
这样排序就不会丢失。刷新集合视图无济于事。
如果某个分组、排序和筛选操作中涉及的项目属性值是 更新后,排序/分组/过滤将不会再次完成。
WPF 4.5 引入了一项称为实时整形的功能,该功能可塑造 实时收藏视图。
有关详细信息,请参阅此文章。
您是否尝试在更新后执行CollectionView.Refresh()
?
如果这没有帮助,那么我认为您的问题发生了,因为您通过为Rows
列表分配新值来更改CollectionView
的来源。
我不知道您的代码是否可以,但不要分配新列表,只需清除以前的列表并在那里插入新行即可。
if (Rows != null)
Rows.Clear();
Rows.TrimExcess();
else
Rows = new List<TableRow>();