0

假设我有一个运动运动员的内存集合,包括他们就读的大学、他们的位置和当前球队,绑定到 3 个不同的控件(ListBoxes),以便按这 3 个不同的分组浏览不同的运动员

是否可以将 3 个控件与不同的 ICollectionView 同步,以便一个选择与其他选择同步?或者只有当它们都绑定到同一个 ICollectionView 实例时才有可能?我已经设置了 3 个 ListBoxes 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 查询。

顺便说一句,原始数据库中大约有 2000 行 - 初始界面似乎需要明显的 1 秒才能开始绘制自己是否有其他方法可以更有效地做到这一点?只要我不替换 ControlTemplate 并因此删除 VirtualizingStackPanel(但我确实有 ItemTemplate 和 HeaderTemplate 的 DataTemplates),我就不会无意中禁用项目虚拟化吗?

4

1 回答 1

1

这些CollectionView行为很像数据库中的视图,因为它有点像实际数据的实时快照,您可以对其进行分组、排序、过滤等。如果您使用 3 个单独的 CollectionView,我不相信IsSynchronizedWithCurrentItem会在其中工作这种情况是因为我相信可能取决于一个单一的,ICollectionView.

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

于 2012-08-19T01:47:39.757 回答