使用所述ViewModel从ViewModel集合中删除ViewModel

时间:2014-09-07 06:13:03

标签: c# wpf mvvm viewmodel observablecollection

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

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

我考虑过的选项但是一直没有用,包括;

  1. 在其包含的每个ViewModel中引用VMcollection
  2. 在视图包中引用VMcollection正在包装的模型集合
  3. 在VMcollection的每个ViewModel中引用父ViewModel
  4. 我完全不知所措,没有研究表明答案。是否可以将每个删除按钮的datacontext重定向到父ViewModel并从那里删除子ViewModel?如果是这样我怎么做,并传递我需要删除哪个子ViewModel(网格线)?

1 个答案:

答案 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>