1

我有一个实现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

下面的代码在我的缩略图用户控件中

 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 创建新对象,如下所示

第一次,第一个标签加载我的缩略图用户控件 当我单击第二个选项卡时,它分组两次,如下所示,此外,第二个分组也发生在第一个选项卡中,即使我使用过

obj = New ThumbnailImages

AddtabItem方法中

分组两次 分组三遍

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

4

2 回答 2

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))
于 2013-06-24T06:33:13.060 回答
0

它被分组两次/更多,因为您添加了相同的PropertyGroupDescription两次/更多次。

定义一个类级别变量来保存PropertyGroupDescription下面的内容

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

然后,在添加之前PropertyGroupDescription检查它是否已经添加

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

抱歉,代码是用 C# 编写的,但我相信你会明白它背后的想法。

于 2013-06-22T13:42:02.103 回答