I have a ListView which I'm binding to a CollectionViewSource in code behind with:
collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource);
collectionView.SortDescriptions.Clear();
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction));
The TableView is the ListView, the propertyName is the name of the column I want sorted, and direction is either ascending or descending.
The XAML has the following for ItemSource:
ItemsSource="{Binding Rows}"
The code behind has the following for the Rows:
List<TableRow> rows;
public List<TableRow> Rows
{
get { return rows; }
set
{
rows = value;
UpdateProperty("Rows");
}
}
the update is as follows:
public void Update()
{
...generate a list of rows...
Rows = ...rows...
}
The problem occurs when the Update is called, the list view does update, but loses the sorting set previously on the CollectionViewSource.
Did you try to do
CollectionView.Refresh()
after your update?If this does not help then I think your problem occurs because you change the source of your
CollectionView
by assigning new value to yourRows
list.I don't know if it is possible to your code but don't assign new list just clear your previous one and insert new rows there.
If you are "newing" rows then any setting on the prior rows is gone. If you clear (not new) the rows then I think they will hold the setting.
And you don't even want Rows = rows in update. After assign rows then.
So the UI know to update
If you are going to new then reassign
Maybe
and have that the only place you new it
See this article for more info.
The answer is to reapply the sort descriptions after the update, as in:
Then the sorting isn't lost. Refresh on the collection view doesn't help.