所以我使用WPF
以MVVM
的方式使用Caliburn.Micro
作爲框架。可觀察綁定到兩個ICollectionView的同一集合
我有一個ViewModel與ObservableCollection,我需要顯示兩次不同的排序,過濾和分組。
我很難過這種所謂的簡單行動。我通常會這樣做:
private ICollectionView _datagridCollectionView;
public ICollectionView DatagridCollectionView
{
get
{
if (this._datagridCollectionView == null)
{
this._datagridCollectionView = CollectionViewSource.GetDefaultView(this.Items);
using (this._datagridCollectionView.DeferRefresh())
{
this._datagridCollectionView.SortDescriptions.Clear();
this._datagridCollectionView.SortDescriptions.Add(new SortDescription("SortingProperty", ListSortDirection.Ascending));
}
}
return this._datagridCollectionView;
}
}
它工作正常,它排序,它是可觀察的。
所以我加了第二種觀點是相同的:
private ICollectionView _chartCollectionView;
public ICollectionView ChartCollectionView
{
get
{
if (this._chartCollectionView == null)
{
this._chartCollectionView = CollectionViewSource.GetDefaultView(this.Items);
using (this._chartCollectionView.DeferRefresh())
{
this._chartCollectionView.Filter = (p) => { return p.IsChartable; };
}
}
return this._chartCollectionView;
}
}
現在的問題是(可能是因爲我訪問默認視圖,因此具有相同的參考),所有排序/過濾做是爲了兩個視圖。
所以我試圖做的ICollectionView
新的實例,但CollectionView
不應該被用來和ListCollectionView
由列表和不IEnumarbles
所以我即使我使用ToList()
方法的意見是不再觀察到。
什麼是正確的方法來做到這一點?
您是否嘗試過按照'CollectionView'類的文檔備註中所述的建議? *若要爲僅實現「IEnumerable」的集合創建集合視圖,請創建一個「CollectionViewSource」對象,將集合添加到Source屬性,並從View屬性獲取集合視圖。* – 2013-05-13 11:45:37
@DanielHilgarth Absolutely ,但你的答案指出我在那裏犯的錯誤,我直接綁定到CollectionViewSource而不是它的View屬性,這很好。也許你不想提交這個答案?當你這樣做時,你是否使用CollectionViewSource或它的View屬性進行排序。過濾器似乎必須直接應用於View屬性。 – 2013-05-13 11:58:14