可以在控件之间同步分组ICollectionViews吗?

时间:2012-08-18 21:19:23

标签: c# wpf

假设我有一个体内运动员的内存集合,包括他们就读的大学,他们玩的位置,以及当前的团队,绑定到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)我会不会无意中禁用项目虚拟化吗?

1 个答案:

答案 0 :(得分:1)

CollectionView与数据库中的View非常相似,它有点像实际数据的实时快照,您可以对其进行分组,排序,过滤等。如果您使用3个单独的CollectionView,我不相信IsSynchronizedWithCurrentItem会在这种情况下起作用,因为我认为这可能取决于单个ICollectionView

但是没有理由你不能在ViewModel中创建一个属性(你使用的是MVVM吗?如果没有,我强烈推荐它)代表CurrentPlayer并绑定所有的SelectedItem属性ListBoxes到此属性(确保该属性引发NotifyPropertyChanged事件)。