Wpf ListCollectionView多次分组
我有一个usercontrol,它实现了ListCollectionView,当我单独运行它时,它工作正常,但是当我把它放在另一个usercontrol中时,它是动态tabControl,动态创建tab,真正的问题是当我创建第二个选项卡时,分组发生2次,如果我创建第三个选项卡,则分组发生3次,依此类推。我已经参考了链接 用于创建动态选项卡,然后Wpf ListCollectionView多次分组,wpf,user-controls,tabs,listcollectionview,Wpf,User Controls,Tabs,Listcollectionview,我有一个usercontrol,它实现了ListCollectionView,当我单独运行它时,它工作正常,但是当我把它放在另一个usercontrol中时,它是动态tabControl,动态创建tab,真正的问题是当我创建第二个选项卡时,分组发生2次,如果我创建第三个选项卡,则分组发生3次,依此类推。我已经参考了链接 用于创建动态选项卡,然后 Public obj As ThumbnailImages Private Function AddTabItem() As TabItem
Public obj As ThumbnailImages
Private Function AddTabItem() As TabItem
Dim count As Integer = _tabItems.Count
' create new tab item
Dim tab As New TabItem()
tab.Header = String.Format("tab{0}", count)
tab.Name = String.Format("tab{0}", count)
tab.HeaderTemplate = TryCast(tabDynamic.FindResource("TabHeader"), DataTemplate)
obj = New ThumbnailImages
' add controls to tab item,
tab.Content = obj
obj.SetDataContext(ImageCollection)
_tabItems.Insert(count - 1, tab)
Return tab
End Function
下面的代码在我的缩略图用户控件中
Public Sub GroupAndSortImages()
myCollectionView = Nothing
myCollectionView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), ListCollectionView)
myCollectionView.GroupDescriptions.Add(New PropertyGroupDescription("Name"))
myCollectionView.SortDescriptions.Add(New SortDescription("Name[0]", ListSortDirection.Ascending))
MyList.ItemsSource = myCollectionView
End Sub
Public Sub SetDataContext(ByVal datacontext As Object)
Me.DataContext = datacontext
GroupAndSortImages()
End Sub
在上面的代码中,我将在第一次单击“新建”选项卡时为我的缩略图用户控件创建新对象,其工作正常,如下所示
当我单击第二个选项卡时,它的分组两次,如下所示,此外,第二次分组也发生在第一个选项卡中,尽管我使用了
obj = New ThumbnailImages
在AddtabItem方法中
我调试了很长时间,但无法找到原因。提前感谢。由于您添加了相同的
PropertyGroupDescription
两次/多次,因此它被分组了两次/多次
定义一个类级变量来保存PropertyGroupDescription
,如下所示
private PropertyGroupDescription _NamePropertyGroupDescription = new PropertyGroupDescription("Name");
然后,在添加PropertyGroupDescription
之前,只需检查它是否已经添加
if (myCollectionView.GroupDescriptions.Contains(_NamePropertyGroupDescription) == false)
{
myCollectionView.GroupDescriptions.Add(_NamePropertyGroupDescription);
}
对不起,代码是用C#写的,但我相信你会明白它背后的意思 由于您添加了相同的
PropertyGroupDescription
两次/多次,因此它被分组了两次/多次
定义一个类级变量来保存PropertyGroupDescription
,如下所示
private PropertyGroupDescription _NamePropertyGroupDescription = new PropertyGroupDescription("Name");
然后,在添加PropertyGroupDescription
之前,只需检查它是否已经添加
if (myCollectionView.GroupDescriptions.Contains(_NamePropertyGroupDescription) == false)
{
myCollectionView.GroupDescriptions.Add(_NamePropertyGroupDescription);
}
对不起,代码是用C#写的,但我相信你会明白它背后的意思 或者可以像上面Anand回答的那样实现,或者只需 在关联之前清除groupdescription
Dim myCollectionView As ListCollectionView
myCollectionView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), ListCollectionView)
myCollectionView.GroupDescriptions.Clear()
myCollectionView.GroupDescriptions.Add(New PropertyGroupDescription("Name"))
myCollectionView.SortDescriptions.Add(New SortDescription("Name[0]", ListSortDirection.Ascending))
要么像上面阿南德回答的那样实现,要么简单地通过 在关联之前清除groupdescription
Dim myCollectionView As ListCollectionView
myCollectionView = CType(CollectionViewSource.GetDefaultView(Me.DataContext), ListCollectionView)
myCollectionView.GroupDescriptions.Clear()
myCollectionView.GroupDescriptions.Add(New PropertyGroupDescription("Name"))
myCollectionView.SortDescriptions.Add(New SortDescription("Name[0]", ListSortDirection.Ascending))
,感谢您的回复,通过在分配
myCollectionView.GroupDescriptions.Clear()之前清除GroupDescription实现的方式,感谢您的回复,通过在分配myCollectionView.GroupDescriptions.Clear()之前清除GroupDescription实现的方式