我的CollectionViewSource没有获取更改
我有一个ListView,我在后面的代码中绑定到CollectionViewSource:
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource); collectionView.SortDescriptions.Clear(); collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
TableView是ListView,propertyName是我想要排序的列的名称,direction是升序或降序。
对于ItemSource,XAML具有以下内容:
ItemsSource="{Binding Rows}"
对于Rows,后面的代码有以下内容:
List rows; public List Rows { get { return rows; } set { rows = value; UpdateProperty("Rows"); } }
更新如下:
public void Update() { ...generate a list of rows... Rows = ...rows... }
调用Update时会出现问题,列表视图会更新,但会丢失以前在CollectionViewSource上的排序集。
如果您正在“新建”行,则之前行的任何设置都将消失。 如果你清除(不是新的)行,那么我认为他们将保留设置。
而你甚至不希望Rows =行更新。 然后分配行。
NotifyPropertyChange("Rows");
用户界面知道要更新
如果你想要新的,那么重新分配
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource); collectionView.SortDescriptions.Clear(); collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
也许
private List rows = new List ();
并拥有你唯一的新地方
如果更新了分组,排序和过滤操作之一中涉及的项属性值,则不会再次进行排序/分组/过滤。
WPF 4.5引入了一个称为实时整形的function,它可以实时调整集合视图。
有关详细信息,请参阅此文章 。
答案是在更新后重新应用排序描述,如:
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource); collectionView.SortDescriptions.Clear(); collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
然后排序不会丢失。 集合视图上的刷新没有帮助。
你更新后尝试做CollectionView.Refresh()
吗?
如果这没有帮助,那么我认为你的问题就出现了,因为你通过为你的Rows
列表分配新的值来改变CollectionView
的源代码。
我不知道你的代码是否可能但是没有分配新列表只是清除你以前的代码并在那里插入新行。
if (Rows != null) Rows.Clear(); Rows.TrimExcess(); else Rows = new List();