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 上的排序集。

My 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>();
相关文章:
  • 没有找到相关文章