【问题标题】:ListCollectionView Grouping MultipletimesListCollectionView 多次分组
【发布时间】:2013-06-22 08:21:48
【问题描述】:

我有一个实现 ListCollectionView 的用户控件,当我单独运行它时它工作正常,但是当我把它放在另一个 userControl 中时,它是 Dynamic tabControl 创建 tab 动态,真正的问题是当我 create 2nd tab 分组发生 2 次​​strong> ,如果我 create 3rd tab 然后 分组发生 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

在上面的代码中,我将在单击新选项卡时为我的缩略图用户控件创建 新对象,当它第一次正常工作时,如下所示

当我点击第二个选项卡时,它会分组两次,如下所示,此外,这个 第二个分组也发生在第一个选项卡中,即使我已经使用过

obj = New ThumbnailImages

AddtabItem方法中

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

【问题讨论】:

    标签: wpf user-controls tabs listcollectionview


    【解决方案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))
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      【讨论】:

      • ,谢谢你的回复,顺便说一句,我在分配myCollectionView.GroupDescriptions.Clear()之前清除了GroupDescription
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 2013-08-03
      • 2021-08-16
      相关资源
      最近更新 更多