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

时间:2016-02-11 12:36:17

标签: c# wpf mvvm caliburn.micro

我使用Caliburn.Micro库编写了MVVM(C#)和XAML程序,如何从ListView控件中获取所有选项(不仅仅是一个项目)?

My code link ...

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

2 个答案:

答案 0 :(得分:2)

要将所选项目添加到ViewModel中,请首先在模型中创建一个bool类型的属性,该属性将与IsSelected ListViewItem属性绑定。

模型类中的属性:

 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();
        }
    }

答案 1 :(得分:0)

保持冷静,看看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);
            }
        }
    }