gpt4 book ai didi

wpf - VirtualizingStackPanel + MVVM + 多选

转载 作者:太空狗 更新时间:2023-10-29 20:40:23 27 4
gpt4 key购买 nike

我已经实现了一种类似于 this post 中描述的选择模式使用 ViewModel 存储 IsSelected 值,并通过将 ListViewItem.IsSelected 绑定(bind)到 ViewModel IsSelected:

<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>

一般都能用,但我遇到了一个严重的问题。通过使用 VirtualizingStackPanel 作为 ListView 中的面板,只会创建可见的 ListViewItem。如果我使用“Ctrl+A”选择所有项目,或者在第一个项目上使用快捷键组合(如“Shift+Ctrl+End”),所有项目都会被选中,但对于不可见项目,ViewModel 不会获得其 IsSelected设置为真。这是合乎逻辑的,因为如果未创建 ListViewItem,绑定(bind)将无法工作。

有没有人遇到同样的问题,并找到了解决方案(除了不使用 VirtualizingStackPanel)?

最佳答案

我在 MVVM 模式中找到了另一种处理选择的方法,它解决了我的问题。不是在 View 模型中维护选择,而是从 ListView/ListBox 中检索选择,并将其作为参数传递给命令。全部在 XAML 中完成:

<ListView 
x:Name="_items"
ItemsSource="{Binding Items}" ... />

<Button
Content="Remove Selected"
Command="{Binding RemoveSelectedItemsCommand}"
CommandParameter="{Binding ElementName=_items, Path=SelectedItems}"/>

在我的 ViewModel 中:

private void RemoveSelection(object parameter)
{
IList selection = (IList)parameter;
...
}

关于wpf - VirtualizingStackPanel + MVVM + 多选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com