我有一个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创建新对象,当它第一次正常工作时如下所示
当我点击第二个标签时,它的分组时间如下所示,并且除了这个第二个分组也发生在第一个标签中,即使我已经使用
obj = New ThumbnailImages
AddtabItem 方法中的
我调试很长时间但无法找出原因。提前谢谢。
答案 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#中,但我相信你会理解它背后的想法。