删除绑定集合中的所有项目后,datagrid.items.count为1,项目集合中唯一的项目是newitemplaceholder,但datagrid不显示newitemplaceholder。只有当最后一个项目是newitemplaceholder并且您尝试编辑它时才会发生这种情况,但不是点击进入,而是单击触发删除事件的按钮。
由于edititem由于编辑事件而不再是newitemplaceholder,因此该项目被视为sourcecollection中的新项目。
在调用delete之前,datagrid中有一个item.count为2。
有关如何让newitemplaceholder在这种奇怪的情况下出现的任何帮助吗?
答案 0 :(得分:0)
我遇到了同样的问题,而且不仅在源集合计数为0时发生,而且在编辑状态中的任何最后一行 - 一旦从编辑状态删除,新的记录行在底部网格消失了。 我还没有找到比这更好的东西 - 非常粗鲁而且不是很快的解决方案,但至少它对我有用,而且现在总比没有好。
给定名为grItems的DataGrid,私有视图模型引用_vm具有用于数据网格绑定的Items属性,示例代码可能如下所示:
<DataGrid Name="grItems"
ItemsSource="{Binding Path=Items}"
UnloadingRow="DataGridUnloadingRow">
和代码背后:
private void DataGridUnloadingRow(object sender, DataGridRowEventArgs e)
{
grItems.UnloadingRow -= DataGridUnloadingRow;
grItems.ItemsSource = null;
grItems.ItemsSource = _vm.Items;
grItems.UnloadingRow += DataGridUnloadingRow;
}
<强>更新强>
后来我注意到当我们需要滚动网格时这不起作用 - 我得到了一些内部WPF错误&#39;偏移和长度超出范围......&#39;。之前我每行都有一个删除按钮,该按钮绑定到与Items列表相同级别定义的命令。所以我不得不摆脱命令,并在一个视图中使用一些肮脏的技巧 - 在从视图模型集合中删除项目之前,我将焦点移出网格中的某个地方,并在删除后将焦点移回。根据我的理解,这个技巧可以实现某种“提交”功能。新添加的行,并且对未处于编辑状态的行执行删除操作。