【问题标题】:Delete a ViewModel from a collection of ViewModels while with the said ViewModel使用所述 ViewModel 从 ViewModel 集合中删除 ViewModel
【发布时间】:2014-10-31 16:32:33
【问题描述】:

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

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

我考虑过但没有得到充分考虑的选项包括:

  1. 在它包含的每个 ViewModel 中引用 VMcollection
  2. 在 VMcollection 包装的 viewModel 中引用模型集合
  3. 在 VMcollection 的每个 ViewModel 中引用父 ViewModel

我完全不知道该怎么做,没有研究显示出答案。是否可以将每个删除按钮的数据上下文重定向到父 ViewModel 并从那里删除子 ViewModel?如果是这样,我将如何执行此操作并传入我需要删除的子 ViewModel(网格线)?

【问题讨论】:

    标签: c# wpf mvvm viewmodel observablecollection


    【解决方案1】:

    在 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>
    

    【讨论】:

    • +1 并且另外添加一个 CommandParameter="{Binding .}" 然后你可以简单地从你的 parentviewmodel 的集合中删除你的 viewmodel
    • 这看起来像我正在寻找的东西,但是,我使用的是从这个示例 youtube.com/watch?v=RbfqNOSyYok 中获取的自定义 ActionCommand 类。所以我需要弄清楚如何将参数传递给类的构造函数。
    • 谢谢我已经解决了,它现在可以工作了:)
    猜你喜欢
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多