我如何从 ViewModel class 的 ListView 中获取所有选定的项目?

How can i get all selected item(s) from ListView in ViewModel class?

我用 MVVM (C#) 和 XAML 使用 Caliburn.Micro 库编写了一个程序,我怎样才能从 ListView 控件中获取 所有 个选定项(不是只有一项)?

My code link ...

使用绑定方法SelectedItem="{Binding SelectedItem}"刚刚获得第一个选择的项目!

保持冷静,看看 github 上的例子 :) https://github.com/samueldjack/SelectedItemsBindingDemo/blob/master/MultiSelectorBehaviours.cs

此示例基于使用行为。
这是一种强大的方法,可以解决 MVVM 中的许多问题。

您需要示例中的 3 个文件:IListeItemConverter.cs、MultiSelectorBehaviour.cs、TwoListSynchronizer.cs。将其复制到您的项目中。

那么您必须在视图中定义名称空间

xmlns:conv="clr-namespace:[MultiSelectorBehavourNamespace]"

之后你可以在 ListView 中使用 MultiSelectorBehaviour

<ListView DockPanel.Dock="Top" conv:MultiSelectorBehaviours.SynchronizedSelectedItems="{Binding SelectedItems}"/>

当然您还需要在 ViewModel

中定义 SourceItems 属性
private ObservableCollection<YourItemType> selectedItems = new ObservableCollection<YourItemType>();
    public ObservableCollection<YourItemType> SelectedItems
    {
        get { return selectedItems; }
        set
        {
            if (selectedItems != value)
            {
                selectedItems = value;
                RaisePropertyChanged(() => SelectedItems);
            }
        }
    }

要将所选项目放入 ViewModel,首先在模型中创建一个 属性 of bool 类型,它将与 IsSelected 属性 of [=15] 绑定=].

属性 模型 class:

 public bool IsSelected
    {
        get { return isSelected; }
        set 
        { 
            isSelected = value;
            RaiseChange("IsSelected");
        }
    }

XAML 风格:

 <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

ViewModel 中的最终 属性:

 public List<DataGridItem> SelectedItem
    {
        get
        {
            return list.Where(item=>item.IsSelected).ToList();
        }
    }