【发布时间】:2014-06-24 20:25:20
【问题描述】:
我有一个带有DataGrid(来自 WPF 工具包)控件的 WPF 应用程序。 ItemsSouce 属性绑定到我的 ViewModel 中的 ObservableCollection。
数据网格有一列,其中包含TextBox:
<dg:DataGrid.Columns>
<dg:DataGridTemplateColumn Header="Name">
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding UserName}" Width="300"/>
</DataTemplate>
</dg:DataGridTemplateColumn.CellTemplate>
</dg:DataGridTemplateColumn>
...
我还有一个“添加”按钮来创建新用户。当我单击它时,会创建一个新行。但是,我希望上面的文本框能够获得输入焦点(当然是在新行上)。我看过:
WPF-MVVM: Setting UI control focus from ViewModel
How to set focus to textbox using MVVM?
Set focus on textbox in WPF from view model (C#)
但它们似乎都依赖于“ElementName”绑定的相同变体,并且看起来它们都不会在ItemsControl 中工作。 获得此行为的正确方法是什么?
【问题讨论】:
-
只需处理TextBox的加载事件并做
Keyboard.Focus(sender as TextBox); -
@HighCore 好主意。在我第一次尝试将焦点放在现有文本框上时,添加新行不会影响它。不过我会尝试更多的版本,谢谢你的建议! 我注意到我在预先设置,可能会导致问题如果可能的话,一个与订单无关的解决方案会很好。
-
@HighCore,插入顺序确实导致了问题。您的解决方案简单有效(如果取决于订单),这将是一个很好的答案。
标签: c# wpf xaml wpftoolkit