将列表视图的多个选定项作为命令参数传递

本文关键字:命令 参数传递 视图 列表 | 更新日期: 2023-09-27 18:33:17

我设法以这种方式将多个选定项目作为参数传递给命令。在我看来:

<Button Command="{Binding MyCommand}" 
        CommandParameter="{Binding SelectedItems, ElementName=MyListView}" />

那么在MyCommandExecute方法中:

var itemsList = (parameter as ObservableCollection<object>).Cast<FtpListItem>().ToList();

这个解决方案目前有效,但我想知道我是否可以以更好的方式从ListView访问多个SelectedItems。可能在第一个表达式中,我可以得到一个null值。

将列表视图的多个选定项作为命令参数传递

您可以期望该参数是一个IEnumerable。我会选择以下内容:

IEnumerable enumerable = parameter as IEnumerable;
if (enumerable == null)
    throw new ArgumentException("parameter has to be an IEnumerable.", "parameter");
var items = enumerable.OfType<FtpListItem>().ToArray();

或者,您可以尝试一些自定义ICollectionView实现。以下博客文章详细讨论了您的问题和可能的解决方案:

MVVM 和多项选择部分 I、II、III、IV