【问题标题】:Get index of selected CollectionView item from underlying ObservableCollection source从底层 ObservableCollection 源获取所选 CollectionView 项的索引
【发布时间】:2016-04-25 21:15:23
【问题描述】:

我有一个绑定到 ListView ItemsSource 属性的 CollectionView。

<ListView x:Name="ExampleView" 
          ItemsSource="{Binding CollectionView}" 
          IsSynchronizedWithCurrentItem="True">...</ListView>

是否可以从 CollectionViewSource 中获取项目的索引?

CollectionViewSource.GetDefaultView(ObservableCollection);

下面我已经说明了这个问题。

当 CollectionView 中的项目 C 被选中时,我想获得 2 而不是 0 的索引值。这可能吗?

非常感谢任何帮助。谢谢!

【问题讨论】:

    标签: c# wpf mvvm collectionview collectionviewsource


    【解决方案1】:

    这对我有用。正如您的代码所建议的那样,它假定您正在过滤的视图是此ObservableCollection 的默认视图。

    var vw = CollectionViewSource.GetDefaultView(MyObservableCollection);
    
    int index = MyObservableCollection.IndexOf(vw.CurrentItem);
    

    当然,您也可以将ListBox.SelectedItem 绑定到视图模型上的SelectedItem 属性,并获取该属性的索引。

    【讨论】:

    • 我将一个 int 属性绑定到 ListBox.SelectedItem,问题是它给了我与 CollectionView 相同的值。您的解决方案当然是一种选择,但如果我有很多项目,那会不会很慢,因为它必须遍历所有项目才能找到正确的项目?
    • @HaloMediaz 这是真的。如果它们被排序,您可以有效地搜索,但这是一个很大的“如果”,当然。商品是否经常更换?
    • 没有。当文本框的文本发生更改时,我在 CollectionView 上调用刷新,这仅在用户通过该文本框进行搜索时发生。当用户从搜索框中选择它时,我只需要获取该项目。我录制了我正在谈论的屏幕:imgur.com/ctgPIQv
    • 如果结果是一个问题(不要借用麻烦),你可以给列表项类一个索引属性。将其添加到集合时分配它。对于那个你填充然后丢弃它们的 UI,这似乎是合适的。但同样,在解决问题之前,请等待查看问题。
    • 谢谢。目前看来这不是问题:)
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    相关资源
    最近更新 更多