【发布时间】:2011-08-01 20:28:08
【问题描述】:
我的 MVVM 应用程序中有一个数据网格,由于客户端希望显示数据的方式,需要使用模板列。他们需要一些典型的数据输入功能(按 Enter 执行数据检查,如果有效则提交该行,关注下一行的第一个文本框;按 Tab 关注下一个文本框......)。此外,数据通常从外部源导入到网格中,通常一次导入数千条记录。
现在,我有一个 Loaded 事件连接到每个文本框,我用它来在添加新行后设置焦点。我的问题是当我导入很多行时网格会变得混乱。当用户滚动时,Loaded 事件被触发,并且网格变得基本不可用。我禁用了虚拟化以防止这种情况发生,并且发现我的网格在某些配置中占用了大量 RAM,这是不可接受的。在不使用大量内存的情况下,我想不出一种方法让这个网格按照他们需要的方式工作。似乎我只需要能够将文本框集中在新添加的行中,但由于数据验证是在视图模型中执行的,我无法访问代码隐藏中的新行,所以我不能只是调用“newtextbox.focus()”或其他什么。我在这里变得非常绝望,任何建议将不胜感激。
【问题讨论】:
-
Focus 在 WPF 中有点像派对垃圾。查看 Josh Smith joshsmithonwpf.wordpress.com/2010/03/16/… 的这篇文章,也许有解决方案的提示。
-
如果您跳过网格中的编辑/验证并仅使用网格进行显示的解决方案怎么样。然后当说一个网格行时,双击你会弹出一个网格行编辑器,它可以编辑网格中的行。
-
那绝对不会飞...客户希望直接在网格中输入数据。我试过了。
-
@drowned,您是否在绑定到您的数据网格的 ObservableCollection 中使用批量插入?
-
不,我不是。在数据输入期间,我一次插入一行......在导入期间,我只是将一个新集合分配给绑定到网格的对象。
标签: wpf mvvm datagrid data-entry