假设我有一个体内运动员的内存集合,包括他们就读的大学,他们玩的位置,以及当前的团队,绑定到3个不同的控件(ListBoxes),以便通过这3个不同的分组浏览不同的玩家
是否可以将3个控件与不同的ICollectionView同步,以便一个选项与其他选项同步?或者只有当它们都绑定到同一个ICollectionView实例时才可以这样做?我有3个ListBox已经设置了IsSynchronizedWithCurrentItem =“true”但我怀疑这只有在他们使用相同的ICollectionView时才有效吗?
这就是我在我的代码中所做的事情:
ICollectionView collegeView = new ListCollectionView(playerDatabase);
collegeView.GroupDescriptions.Add(new PropertyGroupDescription("CollegeName"));
collegeView.SortDescriptions.Add(new SortDescription("CollegeName", ListSortDirection.Ascending));
collegeView.SortDescriptions.Add(new SortDescription("FirstName", ListSortDirection.Ascending));
lstCollege.ItemsSource = collegeView;
ICollectionView positionView = new ListCollectionView(playerDatabase);
positionView.GroupDescriptions.Add(new PropertyGroupDescription("PositionCode", new NFLPositionGrouper()));
positionView.SortDescriptions.Add(new SortDescription("PositionName", ListSortDirection.Ascending));
positionView.SortDescriptions.Add(new SortDescription("FirstName", ListSortDirection.Ascending));
playerDatabase变量来自LINQ to Entity查询,用于投射匿名类型。
BTW在原始数据库中大约有2000行 - 看起来初始界面需要一个明显的1秒来绘制自己最初有没有其他方式我可以更有效地做到这一点?只要我不替换ControlTemplate并因此删除VirtualizingStackPanel(我确实有ItemTemplate和HeaderTemplate的DataTemplates)我会不会无意中禁用项目虚拟化吗?答案 0 :(得分:1)
CollectionView
与数据库中的View非常相似,它有点像实际数据的实时快照,您可以对其进行分组,排序,过滤等。如果您使用3个单独的CollectionView,我不相信IsSynchronizedWithCurrentItem
会在这种情况下起作用,因为我认为这可能取决于单个ICollectionView
。
但是没有理由你不能在ViewModel中创建一个属性(你使用的是MVVM吗?如果没有,我强烈推荐它)代表CurrentPlayer并绑定所有的SelectedItem
属性ListBoxes到此属性(确保该属性引发NotifyPropertyChanged
事件)。