2012-04-11 27 views
2

我有一個ListView這我在後面的代碼與綁定到CollectionViewSource:我CollectionViewSource是不是撿了改變

collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource); 
collectionView.SortDescriptions.Clear(); 
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction)); 

的TableView中是ListView控件,替換propertyName是我想要的列名排序,方向是升序還是降序。

的XAML具有的ItemSource以下:

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... 
} 

的問題發生在更新被調用時,列表視圖確實更新,但之前丟失了Collect中的排序集ionViewSource。

回答

4

如果您正在「新建」行,則之前行上的任何設置都將消失。如果你清除(不是新的)行,那麼我認爲他們會保持這個設置。

而且你甚至不需要更新中的行=行。 然後分配行。

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>(); 

,並具有唯一的地方,你新的IT

+0

不幸的是,使用行=行是我正在工作的要求。 – imekon 2012-04-12 08:06:49

+1

@imekon爲什麼是行=行是一個要求? – Paparazzi 2012-04-12 13:20:21

0

喲喲你在更新後嘗試做CollectionView.Refresh()

如果這沒有幫助,那麼我認爲你的問題發生是因爲你通過給你的Rows列表分配新值來更改CollectionView的來源。

我不知道是否有可能你的代碼,但不分配新的列表只是清除前一個和插入新行存在。

if (Rows != null) 
    Rows.Clear(); 
    Rows.TrimExcess(); 
else 
    Rows = new List<TableRow>(); 
+0

刷新沒有效果 – imekon 2012-04-12 10:21:37

1

答案是更新後重新應用排序的說明,如:

collectionView = CollectionViewSource.GetDefaultView(TableView.ItemsSource); 
collectionView.SortDescriptions.Clear(); 
collectionView.SortDescriptions.Add(new SortDescription(propertyName, direction)); 

則排序不會丟失。刷新集合視圖並沒有幫助。

+0

這正是我在23小時前的回答中所說的。如果你要去新,然後重新分配... – Paparazzi 2012-04-12 15:54:24

+0

這是真的,我希望刷新或更簡單會做到這一點。 – imekon 2012-04-13 10:33:27

2

如果在分組,排序和過濾操作之一中涉及的項目屬性值更新爲 ,則不會再次執行排序/分組/過濾。

WPF 4.5引入了一個名爲直播整形功能,塑造活的 集合視圖。

有關更多信息,請參閱this article