我遇到了同样的问题,而且它不仅发生在源集合计数为 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 错误“偏移量和长度超出范围......”。早些时候,我每行都有一个删除按钮,该按钮绑定到与 Items 列表在同一级别上定义的命令。所以我不得不摆脱命令并在视图中使用代码背后的一些肮脏的技巧 - 在从视图模型集合中删除一个项目之前,我将焦点移出网格的某个地方,删除后将焦点收回。据我了解,此技巧对新添加的行执行某种“提交”,并对未处于编辑状态的行执行删除操作。