我正在使用DataGrid向用户显示数据。
我允许用户编辑数据并添加新行。是否可以使用CanUserDeleteRows
的内置功能来允许用户只删除他刚刚添加的行。
所以usecase-description:
1)用户打开datagrid 2)datagrid显示其内容 3)用户添加几行 4)用户删除其添加的行中的一个(或全部)。 5)用户不能够删除初始加载时数据网格中的行
...所以只有“新”行应该能够被删除。这方面最好的方法是什么?我现在有点想法......
更新:要满足您的意见;)
我正在使用自定义类的ObservableCollection来填充数据网格。所以“问题”是我实际上并不知道如何在没有破坏mvvm模式的情况下“拦截”删除事件,也不知道怎么做。
答案 0 :(得分:0)
您有两种选择:
1 `Disconnected Mode`
您在缓存中保存新行,使用GetChanges
方法获取添加的行。
//GetChanges return added rows before update datasource from caching
var newRows = YourDataTable.GetChanges(DataRowState.Added);
您添加另一个数据列,每次添加新行时都会设置此列的值。
DataColumn columnFlag = new DataColumn("FlagDelete", typeof(bool));
根据列值, Delete Button
为visible
2 `Connected Mode`
您在数据库中创建新列,您实现服务器调用以获取数据,并根据列标志的值显示您的函数删除
答案 1 :(得分:0)
当我使用ObservableCollections等时,我使用了一种基于Aghilas Yakoub答案的工作方法。
我向DataGrid添加了一个Remove-Button,可见性绑定到IsNew
- Property。
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Remove" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=DataContext.BottomDetailVM.DeleteCommand}" Visibility="{Binding IsNew, Converter={StaticResource Bool2VisibilityConverter}, FallbackValue=Collapsed}" CommandParameter="{Binding}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
当usere单击按钮时,将使用当前对象(显示在行中)作为参数执行命令。
public ICommand DeleteRangfolgeCommand
{
get
{
return new ActionCommand<MyOwnViewModel>(ExecuteDelete);
}
}
private void ExecuteDelete(MyOwnViewModel viewModelToDelete)
{
this.ItemsSourceList.Remove(viewModelToDelete);
}
顺便说一句:我正在使用来自MSDN-Magazine的RelayCommand
- 实现(在我的案例中称为ActionCommand)。