ListCollectionView分组多次

时间:2013-06-22 08:21:49

标签: wpf user-controls tabs listcollectionview

我有一个usercontrol实现 ListCollectionView ,当我单独运行它的工作时,但当我把它放在另一个用户控件动态tabControl 时创建选项卡动态,真正的问题出现在我创建第二个标签 分组发生2次,如果我创建第三个标签然后分组发生3次,就像这样。我已经引用了链接http://www.codeproject.com/Articles/493538/Add-Remove-Tabs-Dynamically-in-WPF 用于创建动态标签,然后

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

代码位于我的Thumbnail Usercontrol

 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

在上面的代码中,我会在点击新标签时为我的缩略图usercoontrol创建新对象,当它第一次正常工作时如下所示

First time ,first tab loading my thumbnail usercontrol 当我点击第二个标签时,它的分组时间如下所示,并且除了这个第二个分组也发生在第一个标签中,即使我已经使用

obj = New ThumbnailImages
AddtabItem 方法

中的

Grouping two times Grouping three times

我调试很长时间但无法找出原因。提前谢谢。

2 个答案:

答案 0 :(得分:1)

要么可以通过上面回答的 Anand 来实现,要么就可以通过

完成

在分配之前清除 GroupDexcription

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

答案 1 :(得分:0)

它被分组两次/更多,因为你已经两次/多次添加相同的PropertyGroupDescription

定义一个类级变量来保存PropertyGroupDescription,如下所示

private PropertyGroupDescription _NamePropertyGroupDescription = new PropertyGroupDescription("Name");

然后,在添加PropertyGroupDescription之前,只需检查是否已添加

if (myCollectionView.GroupDescriptions.Contains(_NamePropertyGroupDescription) == false)
{
    myCollectionView.GroupDescriptions.Add(_NamePropertyGroupDescription);
}

对不起,代码在C#中,但我相信你会理解它背后的想法。