shift + click无法使用listview选择正确的项目

时间:2014-04-22 05:56:28

标签: wpf listview wpf-controls

在我的ListView中,我想按ctrl + A选择所有项目,并选择多个项目配合shift键。但它不起作用。我使用keybinding来重写select all命令,但如何处理用shift键选择多个项目?

XAML:

 <ListView VirtualizingPanel.IsVirtualizing="True" 
              VirtualizingPanel.VirtualizationMode="Recycling" 
              ItemsSource="{Binding TestList}"
              SelectionMode="Extended">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding TestContent}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.InputBindings>
            <KeyBinding Command="{Binding SelectAllCommand}"
                        Modifiers="Control"
                        Key="A"/>
        </ListView.InputBindings>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="IsSelected" Value="{Binding IsSelected,Mode=TwoWay}"/>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

MainViewModel:

public class MainViewModel
{
    public ICommand SelectAllCommand { protected set; get; }

    public MainViewModel()
    {
        SelectAllCommand = new DelegateCommand(ExecuteSelectAllCommand);

        TestList = new List<Test>();
        InitializeList();
    }

    private void ExecuteSelectAllCommand()
    {
        foreach (var v in this.TestList)
        {
            v.IsSelected = true;
        }
    }

    private void InitializeList()
    {
        for (int i = 0; i < 500; i++)
        {
            this.TestList.Add(new Test() { TestContent = i.ToString(), IsSelected = false });
        }
    }

    public List<Test> TestList { get; set; }
}

测试类:

public class Test : NotificationObject
{
    public string TestContent { get; set; }

    private bool isSelected;

    public bool IsSelected
    {
        get { return isSelected; }

        set
        {
            if (isSelected != value)
            {
                isSelected = value;
                RaisePropertyChanged("IsSelected");
            }
        }
    }

}

由于我的真实ListView将从服务器加载项目,它可能包含大量项目,因此我必须使用VirtualizationPanel。

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

如果您要将SelectedItems绑定到可视化面板上,原因显而易见,您需要使用一种行为:如果该项目不需要加载,那么它就不会出现这种情况。存在。

我遇到了这个问题并使用了Telerik要求用户使用RadGridView的方法。

您可以找到该方法here