我想为我的数据网格列使用数据模板,并为每个项目提供一个按钮。如果用户单击按钮,我希望删除该项目。我正在使用 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/