我确信这不是实现这一目标的“最佳实践”方式,但这很简单:
您可以将 ListView 的选定项作为参数传递给命令:
<Button Content="Delete selected item" Command="{Binding DeleteCommand}" CommandParamenter="{Binding ElementName=SomeListView, Path=SelecteItem}" />
由于您可以尝试从 ObservableCollection 中删除一个项目,即使它在集合中不存在而不会出现异常,所以在您的私有 Delete 方法中,您可以尝试从您的 ViewModel 中的所有 ObservableCollection 中删除该项目。我在这里假设一个项目不能同时在两个集合中,如果不是这种情况,我所说的将不起作用,因为您将从所有集合中删除该项目。如果您打算这样做,只需在删除之前检查 null,如果您尝试删除 null 对象,您将收到异常。
private void DeleteLO(object listitem)
{
if(listitem != null)
{
if(listitem as CollectionType1 != null) //cast your listitem to the appropiate type inside your collection
this.Wk01CECollection.Remove(listitem);
if(listitem as CollectionType2 != null)
this.Wk02CECollection.Remove(listitem);
//etc.
}
}
除此之外,如果您使用 MVVM,最好 ViewModel 不知道 View,因此在 VM 中引用 ListView 会破坏该原则。