自定义 CollectionViewType 不支持使用 shift 键进行多选 [英] Custom CollectionViewType does not support multiple selection using shift key

查看:21
本文介绍了自定义 CollectionViewType 不支持使用 shift 键进行多选的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Window 中,我使用自定义 CollectionViewTypeCollectionViewSource(EmployeeCollectionView).

In a Window, I group items in a ListBox using a custom CollectionViewType with a CollectionViewSource (EmployeeCollectionView).

MainWindow.xaml:

<Window x:Class="ListBoxSelectionMode.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ListBoxSelectionMode">
<Window.Resources>
    <CollectionViewSource x:Key="EmployeesSource" Source="{Binding Employees}" CollectionViewType="local:EmployeeCollectionView" />

    <DataTemplate x:Key="EmployeeTemplate">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding FirstName}" />
            <TextBlock Text="{Binding LastName}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<ListBox ItemsSource="{Binding Source={StaticResource EmployeesSource}}"
         ItemTemplate="{StaticResource EmployeeTemplate}"
         SelectionMode="Extended">
    <ListBox.GroupStyle>
        <x:Static Member="GroupStyle.Default"/>
    </ListBox.GroupStyle>
</ListBox>

MainWindow.xaml.cs:

public partial class MainWindow : Window
{
    public IEnumerable<Employee> Employees { get; set; }

    public MainWindow()
    {
        InitializeComponent();

        Employees = new List<Employee>
        {
            new Employee { FirstName = "FirstName1", LastName = "LastName1", HireDate = new DateTime(1970, 1, 1) },
            new Employee { FirstName = "FirstName2", LastName = "LastName2", HireDate = new DateTime(1970, 1, 1) },
            new Employee { FirstName = "FirstName3", LastName = "LastName3", HireDate = new DateTime(1980, 1, 1) },
            new Employee { FirstName = "FirstName4", LastName = "LastName4", HireDate = new DateTime(1980, 1, 1) },
            new Employee { FirstName = "FirstName5", LastName = "LastName5", HireDate = new DateTime(1990, 1, 1) },
            new Employee { FirstName = "FirstName6", LastName = "LastName6", HireDate = new DateTime(1990, 1, 1) }
        };

        DataContext = this;
    }
}

EmployeeCollectionView.cs:

class EmployeeCollectionView : ListCollectionView
{
    private readonly IList<EmployeeCollectionViewGroup> _groups;
    public override ReadOnlyObservableCollection<object> Groups
    {
        get { return new ReadOnlyObservableCollection<object>(new ObservableCollection<object>(_groups)); }
    }

    public EmployeeCollectionView(IList list)
        : base(list)
    {
        _groups = list
             .OfType<Employee>()
            .GroupBy(x => x.HireDate)
            .Select(x => new EmployeeCollectionViewGroup(x.Key, x))
            .ToList();
    }
}

EmployeeCollectionViewGroup.cs:

class EmployeeCollectionViewGroup : CollectionViewGroup
{
    public EmployeeCollectionViewGroup(object name, IEnumerable<object> protectedItems)
        : base(name)
    {
        foreach (var protectedItem in protectedItems)
            ProtectedItems.Add(protectedItem);
    }

    public override bool IsBottomLevel
    {
        get { return true; }
    }
}

问题:为什么我不能使用 SHIFT 键选择多个项目?

Question: Why can't I select multiple items using SHIFT key?

使用 CTRLworks 进行多项选择.

Multiple selection using CTRLworks.

推荐答案

您是否尝试过按下 CTRL 键而不是 SHIFT 键?在您的列表声明之后移动 InitializeComponent.

Have you tried pushing down the CTRL key instead of SHIFT key? Also move InitializeComponent after the declaration of your List.

这篇关于自定义 CollectionViewType 不支持使用 shift 键进行多选的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆