使用ViewModel时,从ViewModel集合中删除ViewModel

本文关键字:ViewModel 删除 集合 使用 | 更新日期: 2023-09-27 18:20:52

我有一个MainView,它包含一个显示ViewModels集合的DataGrid。我用过这个http://www.thesilvermethod.com/default.aspx?Id=VMCollectionWrapperSynchronizeaModelcollectionwithaViewModelcollection示例来实现ViewModel集合。

DataGrid的行中有一个用于删除每一行的按钮。问题是,单击时会访问ViewModel集合中ViewModel的delete命令。然后,我该如何让这个ViewModel从自身内部删除它自己?

我考虑过但没有成功的选项包括:;

  1. 在其包含的每个ViewModel中引用VM集合
  2. 引用视图中的模型集合VMcollection正在包装的模型
  3. 引用VM集合的每个ViewModel中的父ViewModel

我完全不知道该怎么办,也没有任何研究表明答案。是否可以将每个删除按钮的数据上下文重定向到父ViewModel并从中删除子ViewModel?如果是这样的话,我该如何做到这一点并传入我需要删除的子ViewModel(网格线)?

使用ViewModel时,从ViewModel集合中删除ViewModel

在WPF中,您可以使用相对源从列中获取DataGrid级别的DataContext:

例如

<Button Command="{Binding DataContext.DeleteCommand,
                   RelativeSource={RelativeSource AncestorType=DataGrid}}"/>

这将从父ViewModel 访问删除命令

因此,如果您在网格中的一列中有一个删除按钮,那么访问父视图模型中的命令将是这样的。

<DataGrid x:Name="DG" ItemsSource="{Binding}" AutoGenerateColumns="False">
 <DataGrid.Columns>
      <DataGridTemplateColumn CellStyle="{StaticResource ResourceKey=Button}">
              <DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                      <Button Content="Delete" Command="{Binding DataContext.DeleteCommand,
                          RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
                 </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
       </DataGridTemplateColumn>
 </DataGrid.Columns>
 </DataGrid>