wpf - 如何在数据网格模板中有一个按钮,单击该按钮将删除该项目

标签 wpf mvvm datagrid

我想为我的数据网格列使用数据模板,并为每个项目提供一个按钮。如果用户单击按钮,我希望删除该项目。我正在使用 MVVM 模式。我将如何做到这一点?

<DataGridTemplateColumn>
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <Button Width="50" Content="Remove" Command="{Binding RemoveItemCommand}"/>
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

最佳答案

public class ItemViewModel
{
  public ItemViewModel()
  {
    RemoveCommand = new MyCommand(Remove);
  }

  public event EventHandler ItemRemoved;
  public ICommand RemoveCommand { get; private set; }

  private void Remove()
  {
    // Whatever it takes to remove item from your data store
    service.Remove(this.Data);

    var removeItem = ItemRemoved;
    if (removeItem != null)
      removeItem(this, EventArgs.Empty);
  }
}

public class ListViewModel
{
  public ListViewModel(IEnumerable<ItemViewModel> items)
  {
    ItemVMs=new ObservableCollection<ItemViewModel>(items);
    foreach (var item in ItemVMs)
      item.ItemRemoved += RemoveSelectedItem;
  }

  public ObservableCollection<ItemViewModel> ItemVMs { get; private set; }

  private void RemoveSelectedItem(object sender, EventArgs e)
  {
    var item = sender as ItemViewModel;
    item.ItemRemoved -= RemoveSelectedItem;
    ItemVMs.Remove(item);
  }
}

每个项目的 RemoveCommand 将绑定(bind)到 DataGrid 中的按钮。听起来你已经完成了那部分。使 ListViewModel 的 ItemVMs 属性成为 DataGrid 的数据源。

关于wpf - 如何在数据网格模板中有一个按钮,单击该按钮将删除该项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6625672/

相关文章:

MVVM - 在 View 模型中创建新对象

ios - 如果协调器不在 RxSwift 中,那么在 RxSwift + MVVM + 协调器情况下协调器会去哪里?

.net - 如何在 asp :DataGrid for CSS? 中的第一个表头上放置一个 ID

wpf - 遵循弯曲路径的多段线

c# - 有没有办法将 Keyboard.FocusedElement 设置为特定元素?

c# - MVVM View 模型事件(命令?)

c# - 如何更改 WPF DataGrid 中某些单元格的背景颜色?

javascript - 在数据网格中复选框的 onclick 中使用 Databinder.Eval

c# - 如何存储以前的向导页面?

c# - Windows 回调,当事件窗口改变时