我使用Caliburn.Micro库编写了MVVM(C#)和XAML程序,如何从ListView控件中获取所有选项(不仅仅是一个项目)?
使用绑定方法SelectedItem="{Binding SelectedItem}"
刚刚获得第一个选项!
答案 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);
}
}
}