视图模型具有可观察的Line
个对象集合和AddLine()
方法。
public class ViewModel : Notifiable
{
ObservableCollection<Line> Lines {get; set;}
public void AddLine() { /*add*/ }
}
public class Line : Notifiable
{
public LineData LineData {get;set;}
}
LineData
包含我绑定的字段。
视图(XAML)的Grid
ItemsControl
绑定到可观察集合,DataTemplate
用于显示Line
对象。 Grid
上存在其他控件。
<Grid>
<ItemsControl ItemsSource={Binding Lines}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding LineData}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- other controls -->
</Grid>
LineData
类型资源DataTemplate
的{{1}}和Grid
几个。
我希望用户能够将TextBoxes
TextBox
中的最后LineData
标签添加到新的DataTemplate
。
到目前为止,我已经为预览键向下事件设置了一个事件处理程序,如下所示:
Line
这成功添加了行,并且新行显示在屏幕上,但如果用户位于集合的最后一行,则焦点不会更改为新行中的第一个控件,而是更改为下一个控件在 private void Amount_PreviewKeyDown(object sender, KeyEventArgs e)
{
var key = e.Key == Key.Tab || e.Key == Key.Enter;
if (key)
(DataContext as ViewModel).AddLine();
}
上。
我不确定为什么会这样。我想XAML直到焦点改变之后才会更新,或者某些事情。
如何将焦点转移到Grid
中新创建的行,而不是ItemsControl
上的下一个控件?