[英]How to add a special item to a listview and keep it at the top?
我有一個SortableListView
,我通過綁定設置ItemsSource。 類似於以下內容:
<SortableListView ItemsSource="{Binding Items}">
<SortableListView.View>
<GridView>
<SortableGridViewColumn
Header="Name"
SortProperty="ProductName"
DisplayMemberBinding="{Binding ProductName}"/>
</GridView>
</SortableListView.View>
</SortableListView>
當窗口顯示時,我初始化並填充ObservableCollection<Item> Items
。
現在我想在列表的頂部添加一個(並且只有一個)特殊項目,並始終將其保留為第一個項目,而不管排序順序如何。
目前我可以想到兩種可能的方法來實現這一目標:
選項1似乎太多而且太復雜的工作和選項2是我想要避免的。
我有什么替代解決方案嗎? 如果沒有,那么實現這一目標的最佳選擇是什么,我該如何處理主題選項?
我在這里猜測,但我假設你正在使用這個控件?:
http://thejoyofcode.com/Sortable_ListView_in_WPF.aspx
如果是這樣,它使用ICollectionView來管理它的排序。 ICollectionView非常靈活,允許對多個字段進行排序(就像在SQL中一樣:SORT BY Field1 ASC,Field2 DESC)。
我想你要做的是在添加用戶選擇的屬性的描述之前插入額外的排序描述。 這樣它將首先按“標記”項目排序,然后按所選屬性名稱排序。
(代碼改編自上文)
private void Sort(string sortBy, ListSortDirection direction)
{
ICollectionView dataView = CollectionViewSource.GetDefaultView(this.ItemsSource);
if (dataView != null)
{
dataView.SortDescriptions.Clear();
dataView.SortDescriptions.Add(new SortDescription("IsAtTop", ListSortDirection.Ascending));
SortDescription sd = new SortDescription(sortBy, direction);
dataView.SortDescriptions.Add(sd);
dataView.Refresh();
}
}
所以你只需要在你的對象中添加一個名為'IsAtTop'的bool屬性。
希望這是你需要的......
在視圖模型中,您可以保留一個單獨的ObservableCollection<T>
,它返回列表,頂部添加一個“特殊”項。 如果掛鈎原始ObservableCollection<T>
的CollectionChanged
事件,以便可以在集合上調用PropertyChanged
通知,則可以實現所需的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.