【问题标题】:Custom CollectionViewType does not support multiple selection using shift key自定义 CollectionViewType 不支持使用 shift 键进行多选
【发布时间】:2016-06-17 09:55:48
【问题描述】:

Window 中,我使用带有 CollectionViewSource 的自定义 CollectionViewTypeListBox 中的项目分组(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 键选择多个项目?

编辑:使用 CTRLworks 进行多选。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    您是否尝试按下 CTRL 键而不是 SHIFT 键?在您的 List 声明之后还要移动 InitializeComponent。

    【讨论】:

    • CTRL 工作正常,但我需要 SHIFT 键才能工作。我试图移动 InitializeComponent 但没有任何改变。
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    相关资源
    最近更新 更多