我有一个包含“部分”对象的数据网格,其中包含一些模板列。大多数字段是只读的,其中一些是可编辑的。 Tab键需要在可编辑字段之间循环;我似乎已经解决了这个问题。问题是......当用户在第一个文本框中输入部件号时,他或她可以按TAB或ENTER查找部件号并收到一条消息,说明在发生故障时该号码无效,或者该部件是在成功的情况下添加到网格中的信息。
这是我的问题 - 如果他们使用TAB,'数量'文本框需要聚焦,而下面添加一个新的空行。如果他们使用ENTER键,则需要添加一个空行,并且需要关注新的“部件号”文本框。我无法找到一种方法将文本框集中在我的viewmodel中。我可以使用代码隐藏中的一些事件来做到这一点,但我找不到用TAB添加未聚焦行的方法,以及使用ENTER聚焦行。将CanUserAddRows设置为true甚至看起来都不正常,到目前为止,我一直在成功查找零件时手动添加行,这也会导致问题。如何处理略有不同的tab / enter案例?我可能还需要能够在部件号框上解决lostFocus,以防他们在输入数字后点击另一个控件。
答案 0 :(得分:0)
设置焦点应该在View的代码隐藏中完成,而不是ViewModel,因为焦点等概念是视图特定的
使用Tab键添加新行应在ViewModel中完成。我会在您的KeyDown事件上注册一个命令,该命令将传递给您的ViewModel,并将按下的键传递给它。 ViewModel将检查该键是否为Tab键,如果是,则添加一个新行。
我喜欢使用此代码from this site将Commands
附加到Events
,但此功能还有许多其他实现,因此请使用您认为合适的内容。