我有一个MainView,它包含一个显示ViewModel集合的DataGrid。我使用这个http://www.thesilvermethod.com/default.aspx?Id=VMCollectionWrapperSynchronizeaModelcollectionwithaViewModelcollection示例来实现ViewModel Collection。
在DataGrid的行中是一个删除每一行的按钮。问题是,当单击它时,它将从ViewModel集合中的ViewModel访问delete命令。然后我如何让这个ViewModel从内部删除自己?
我考虑过的选项但是一直没有用,包括;
我完全不知所措,没有研究表明答案。是否可以将每个删除按钮的datacontext重定向到父ViewModel并从那里删除子ViewModel?如果是这样我怎么做,并传递我需要删除哪个子ViewModel(网格线)?
答案 0 :(得分:2)
在WPF中,您可以使用相对源来从列中的DataGrid级别获取DataContext:
e.g。
<Button Command="{Binding DataContext.DeleteCommand,
RelativeSource={RelativeSource AncestorType=DataGrid}}"/>
这将从父ViewModel
访问delete命令因此,如果网格中的列中有删除按钮,则它将如此显示,以便在父视图模型中访问该命令。
<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>