3

删除绑定集合中的所有项目后,datagrid.items.count 为 1,项目集合中的唯一项目是 newitemplaceholder,但数据网格不显示 newitemplaceholder。仅当最后一个项目是 newitemplaceholder 并且您尝试编辑它但不是按 Enter 键而是单击触发删除事件的按钮时,才会发生这种情况。

由于由于编辑事件,所选项目不再是新项目占位符,因此该项目被认为是源集合中的新项目。

在调用 delete 之前,datagrid 中有一个 item.count 为 2。

关于如何让 newitemplaceholder 在这种奇怪的情况下出现的任何帮助?

4

1 回答 1

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

于 2014-10-30T21:59:06.107 回答