Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf ListCollectionView多次分组_Wpf_User Controls_Tabs_Listcollectionview - Fatal编程技术网

Wpf ListCollectionView多次分组

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

我有一个usercontrol,它实现了ListCollectionView,当我单独运行它时,它工作正常,但是当我把它放在另一个usercontrol中时,它是动态tabControl,动态创建tab,真正的问题是当我创建第二个选项卡时,分组发生2次,如果我创建第三个选项卡,则分组发生3次,依此类推。我已经参考了链接 用于创建动态选项卡,然后

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实现的方式