【问题标题】:How get ListCollectionView's currentItem for ListBox SelectionMode="Multiple" it's the last selectedItem?如何获取 ListBox SelectionMode="Multiple" 的 ListCollectionView 的 currentItem,它是最后一个 selectedItem?
【发布时间】:2013-08-05 03:19:09
【问题描述】:

我使用 MVVM,和 ListBox 的 ItemsSource 绑定 ListCollectionView 类型。

如何获取 ListCollectionView 的 currentItem 我想在 SelectionMode="Multiple" 上获取 ListBox 的 Last SelectedItem

目前,我可以得到第一个 selectItem 是 ListCollectionView 的 currentItem ,但不能得到最后一个 SelectedItem 是 ListCollectionView 的 currentItem。

谁能帮帮我?或者告诉我一些解决方案。

谢谢帮忙。

【问题讨论】:

    标签: wpf mvvm wpf-controls


    【解决方案1】:

    您可以使用 Prism 的行为:

    public class LastSelectionBehavior:Behavior<ListBox>
    {
        private ICollectionView _itemsSource;
    
        protected override void OnAttached()
        {
            base.OnAttached();
    
            _itemsSource = AssociatedObject.ItemsSource as ICollectionView;
    
            if (_itemsSource != null)
                AssociatedObject.SelectionChanged += AssociatedObjectSelectionChanged;
        }
    
        void AssociatedObjectSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count > 0)
                _itemsSource.MoveCurrentTo(e.AddedItems[0]);
        }
    }
    

    Xaml:

        <ListBox ItemsSource="{Binding Path=NamesView}" SelectionMode="Multiple">
            <i:Interaction.Behaviors>
                <local:LastSelectionBehavior/>
            </i:Interaction.Behaviors>
        </ListBox>
    

    【讨论】:

    • 感谢 Bill Zhang。我更改了 "AssociatedObjectSelectionChanged" 方法然后它可以工作,但是当 SelectionMode="Extended" 时,你会建议 Get LastItem for currentItem 吗?谢谢。
    • 如果SelectionMode="Extended",则要考虑方向。使用 Ctrl 时,任何一个方向都可以,因为 AdditionalItems 只包含一个元素。但是在使用 Shift 时,你应该考虑是向上还是向下选择。如果选择向上,您应该将当前移动到 e.AddedItems[0],否则您应该将当前移动到 e.AddedItems[e.AddedItems.Count-1]。判断是向上还是向下首先是获取AssociatedObject的索引,e.AddedItems[0]的索引。如果第一个索引小于第二个,则为向下,否则为向上。
    • 精辟分析,受益良多。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多