在我的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。
任何人都可以提供帮助吗?
答案 0 :(得分:0)
如果您要将SelectedItems
绑定到可视化面板上,原因显而易见,您需要使用一种行为:如果该项目不需要加载,那么它就不会出现这种情况。存在。
我遇到了这个问题并使用了Telerik要求用户使用RadGridView
的方法。
您可以找到该方法here