2016-06-17 20 views
2

在窗口中,我使用自定義的CollectionViewType和我的CollectionViewSource將項目分組到ListBox中。自定義CollectionView類型不支持使用Shift鍵的多個選擇

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" 
    Title="MainWindow" Height="350" Width="525"> 
<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(1980, 1, 1) }, 
      new Employee { FirstName = "FirstName6", LastName = "LastName6", HireDate = new DateTime(1990, 1, 1) }, 
      new Employee { FirstName = "FirstName7", LastName = "LastName7", HireDate = new DateTime(1990, 1, 1) }, 
      new Employee { FirstName = "FirstName8", LastName = "LastName8", HireDate = new DateTime(1990, 1, 1) }, 
      new Employee { FirstName = "FirstName9", LastName = "LastName9", 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鍵不起作用多重選擇?

回答

0

您是否嘗試按下CTRL鍵而不是SHIFT鍵?在聲明List之後再移動InitializeComponent。

+0

CTRL完美地工作,但我需要SHIFT鍵才能工作。我試圖移動InitializeComponent,但沒有任何改變。 –

相關問題