当ItemsSource设置为DataView时,如何从WPF ListView中删除选定的ListViewItem?我可以获取所选的ListViewItem,然后如何删除DataView中的实际行?
DataView dv = (DataView)myListView.ItemsSource;
ListViewItem lvi = (ListViewItem)myListView.ItemContainerGenerator.ContainerFromItem(myListView.SelectedItem);
<Delete ListViewItem here>
答案 0 :(得分:2)
将集合绑定到列表视图时,请使用ListCollectionView而不是DataView。可以像这样轻松完成(其中dataView的类型为DataView):
ListCollectionView lcv = new ListCollectionView(dataView);
myListView.ItemsSource = lcv;
现在,当您需要删除任何对象时,只需执行以下操作:
ListCollectionView lcv = (ListCollectionView) myListView.ItemsSource;
lcv.Remove(myListView.SelectedItem);
删除后,只需刷新视图:
lcv.Refresh();
或
((ListCollectionView)myListView.ItemsSource).Refresh();
答案 1 :(得分:0)
考虑使用M-V-VM模式将项目从数据对象列表中删除的概念分开,并直接从当前的UI实现中删除它们。除了Bindings之外,两者不需要彼此了解。
使用MVVM模式时,在ViewModel中公开一个布尔“IsSelected”属性。
public class SimpleViewModel : BaseViewModel //For INotifyPropertyChanged, etc
{
public IList<SimpleBusinessObject> ViewModelItems;
public SimpleViewModel()
{
ViewModelItems = new ObservableList<SimpleBusinessObjectViewModel>();
}
}
public class SimpleBusinessObjectViewModel
{
public bool ViewModelIsSelected { get; set; }
public SimpleBusinessObjectViewModel()
{
ViewModelIsSelected = false;
}
}
接下来,在您的视图中尝试以下内容:
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<Setter Property="IsSelected" Value="{Binding ViewModelIsSelected}"
</Style.Triggers>
</Style>
<ListView ItemsSource={Binding ViewModelItems}>
//here you can insert how you want to display a ListViewItem
</ListView>
这将允许您在ViewModel的列表中添加,编辑和删除项目 - 就像它是实际的ListView一样。从这里,您还可以检查每个项目的IsSelected(响应鼠标与ListView的交互)而不实际检查ListViewItem。这将是一个更清洁,可维护的解决方案。