0

我有一个 ListView,它可以很好地绑定并显示我的 ObservableCollection,但如果我在 DataTemplate 选择的 UserControls 中选择一个 TextBox,则在 ListView 中选择正确的项目除外。我的 DataTemplate 根据 ObservableCollection 中的 Type 选择一个 View,目前只有 TimeDelay:ModelBase 或 AddPoint:ModelBase 类型。

如果我在 ListTimeDelayView 或 ListAddPointView 的 ListView 中选择除 TextBox 之外的任何区域,则选择很好。But, when a TextBox is selected, the ListView selection does not move, see image. 蓝色选择应向下移动到移动 ddddd。

<UserControl.Resources>
    <DataTemplate DataType="{x:Type model:TimeDelay}">
        <local:ListTimeDelayView />
    </DataTemplate>

    <DataTemplate DataType="{x:Type model:AddPoint}">
        <local:ListAddPointView />
    </DataTemplate>
</UserControl.Resources>

列表显示

<ListView ItemsSource="{Binding UserControlOneStatic.MotionSequenceCollection, Mode=TwoWay}"
     SelectedIndex="{Binding MotionSequenceStatic.MotionListViewSelected, Mode=TwoWay}"/>

下图

在此处输入图像描述

4

1 回答 1

1

在 WPF 输入事件中,元素树会冒泡。您可以处理GotKeyboardFocus您的ListView并获取原始元素,它是DataContext.

void myListView_GotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        var element = e.NewFocus as FrameworkElement;
        myListView.SelectedItem = element.DataContext;
    }

这是基本的想法。它应该是 IMO ItemsControls 的默认行为。

编辑:克里斯使用 XAML 样式和触发器链接到更简单和正确的解决方案。

于 2013-11-03T22:28:42.783 回答