C# 使用所述ViewModel时,从ViewModels集合中删除ViewModel

C# 使用所述ViewModel时,从ViewModels集合中删除ViewModel,c#,wpf,mvvm,viewmodel,observablecollection,C#,Wpf,Mvvm,Viewmodel,Observablecollection,我有一个MainView,其中包含一个DataGrid,它显示ViewModels的集合。我使用这个示例来实现ViewModel集合 在DataGrid的行中有一个删除每一行的按钮。问题在于,单击时,它会从ViewModel集合中的ViewModel访问delete命令。然后,如何让此ViewModel从自身中删除自身 我已经考虑过但尚未充分评估的选项包括: 在其包含的每个ViewModels中引用VMcollection 在VMcollection正在包装的viewModel中引用模型集合 在

我有一个MainView,其中包含一个DataGrid,它显示ViewModels的集合。我使用这个示例来实现ViewModel集合

在DataGrid的行中有一个删除每一行的按钮。问题在于,单击时,它会从ViewModel集合中的ViewModel访问delete命令。然后,如何让此ViewModel从自身中删除自身

我已经考虑过但尚未充分评估的选项包括:

  • 在其包含的每个ViewModels中引用VMcollection
  • 在VMcollection正在包装的viewModel中引用模型集合
  • 在VMcollection的每个ViewModel中参照父ViewModel

  • 我完全不知道该做什么,没有任何研究给出答案。是否可以将每个删除按钮的datacontext重定向到父ViewModel并从中删除子ViewModels?如果是这样的话,我将如何执行此操作并传递需要删除的子ViewModel(网格线)?

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

    e、 g

    
    
    这将从父视图模型访问删除命令

    因此,如果在网格中的列中有一个“删除”按钮,则在父视图模型中访问该命令的方式如下所示

    <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>
    
    
    
    +1,另外添加一个CommandParameter=“{Binding.}”,然后您可以简单地从ParentViewModel中的集合中删除您的viewmodel,该集合看起来就像我正在寻找的一样,但是,我使用的是一个自定义ActionCommand类,该类取自本例。因此,我需要解决如何将参数传递给类的构造函数。谢谢,我已经解决了这个问题,现在可以使用了:)
    <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>