ListViewItemsContainer设置为VirtualizationStackPanel时无法正确获取选中项'VirtualizingStackPanel.VirtualizationMode'设置为'回收',因为我的ListView中的项目太多。ListView的SelectionMode是Extended,ListViewItem的'IsSelected'属性绑定到我模型的'IsSelected'属性,绑定方式是双向的。当我想使用Ctrl+A选择所有项目时,它只选择了一些项目,所以我使用KeyBinding编写了一个全选方法,如下所示:SelectAll方法将遍历ItemsSource集合并将项目的每个IsSelected属性设置为true.但它也可能导致意想不到的事情。当所有项目都被选中时,我滚动到底部并将更多项目加载到ListView中,我单击一个项目,所有其他项目都应该被取消选中,只有这个项目被选中。但是,似乎没有其他项目被取消选择。有人可以帮忙吗?选择器的这种行为是预期的,因为它只适用于加载的UI元素。由于启用了虚拟化,您只能加载包含在可见区域内的元素。因此,选择器不“认识”其他人。要解决这个问题,您必须让选择器“知道”之前选择的项目。换句话说,您必须禁止卸载任何选定的UI元素。首先,使用blackjack和hookers创建您自己的虚拟化面板:publicclassMyVirtualizingStackPanel:VirtualizingStackPanel{if(item!=nulls.I&&selectitem){e.Cancel=true;e.Handled=true;返回;}varitem2=e.UIElementasTreeViewItem;if(item2!=null&&item2.IsSelected){e.Cancel=true;e.Handled=true;返回;}base.OnCleanUpVirtualizedItem(e);接下来,替换ListBox、ListView、TreeView或其他提供选择器的用户控件中的默认面板。例如,通过样式:...或者,直接在您的选择器中:享受吧!希望我的回答对你有帮助。以上是C#学习教程:如果将ListViewItemsContainer设置为VirtualizationStackPanel,将无法正确获取选中item共享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
