使用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从自身内部删除它自己?
我考虑过但没有成功的选项包括:;
- 在其包含的每个ViewModel中引用VM集合
- 引用视图中的模型集合VMcollection正在包装的模型
- 引用VM集合的每个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>