【问题标题】:Sourcecollection count is 0 newitemplaceholder is not shownSourcecollection 计数为 0 newitemplaceholder 未显示
【发布时间】:2011-04-07 13:45:31
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wpf datagrid newrow


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 2017-04-29
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      相关资源
      最近更新 更多