【问题标题】:How can i get all selected item(s) from ListView in ViewModel class? [closed]如何从 ViewModel 类的 ListView 中获取所有选定的项目? [关闭]
【发布时间】:2016-05-22 05:46:20
【问题描述】:

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

My code link ...

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

【问题讨论】:

标签: c# wpf mvvm caliburn.micro


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要将所选项目放入 ViewModel,首先在您的模型中创建一个 bool 类型的属性,该属性将与 ListViewItemIsSelected 属性绑定。

    模型类中的属性:

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

    【讨论】:

    • 我无法使用 (control+a) 获取所选项目!!! -and- 我怎样才能在 ListView 中按下按键?
    • @mohammadmot 使用 keydown 事件。
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多