我有一个ListView,它绑定并显示我的ObservableCollection,但如果我在其中一个DataTemplate选择的UserControls中选择一个TextBox,则选择ListView中的正确项目除外。我的DataTemplate根据ObservableCollection中的Type选择一个View,目前只有TimeDelay类型:ModelBase或AddPoint:ModelBase。
如果我在ListTimeDelayView或ListAddPointView的ListView中选择除TextBox之外的任何区域,则选择正常。但是,当选择TextBox时,ListView选项不会移动,请参见图像。蓝色选择应向下移动到Move ddddd。
<UserControl.Resources>
<DataTemplate DataType="{x:Type model:TimeDelay}">
<local:ListTimeDelayView />
</DataTemplate>
<DataTemplate DataType="{x:Type model:AddPoint}">
<local:ListAddPointView />
</DataTemplate>
</UserControl.Resources>
的ListView
<ListView ItemsSource="{Binding UserControlOneStatic.MotionSequenceCollection, Mode=TwoWay}"
SelectedIndex="{Binding MotionSequenceStatic.MotionListViewSelected, Mode=TwoWay}"/>
下面的图片
答案 0 :(得分:1)
在WPF输入事件中冒泡元素树。您可以在GotKeyboardFocus
处理ListView
并获取原始元素,并DataContext
。
void myListView_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
var element = e.NewFocus as FrameworkElement;
myListView.SelectedItem = element.DataContext;
}
这是基本的想法。它应该是ItemsControls,IMO的默认行为。
编辑:Chris使用XAML样式和触发器链接到更简单正确的解决方案。