我如何从 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();
}
}
我用 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();
}
}