使用DataTemplate在ListView中选择项目

时间:2013-11-03 20:19:03

标签: c# wpf listview mvvm-light datatemplate

我有一个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}"/>

下面的图片

enter image description here

1 个答案:

答案 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样式和触发器链接到更简单正确的解决方案。