单击ItemTemplate中的TextBox时,ListView.SelectedItems不会更改

时间:2014-07-18 14:55:55

标签: c# wpf listview

我有一个与ObservableCollection绑定的ListView。 ListView的Itemtemplate如下:

<ListView ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" PreviewMouseLeftButtonUp="ListViewClicked" PreviewKeyDown="NameBox_KeyDown">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="./Resources/DeleteIcon.png"/>
                <TextBox Text="{Binding Path=Name}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这样我就可以让用户选择更改元素的名称,或者从列表中删除它。我通过附加到ListView的两个事件处理程序在代码后面处理这两个操作。

问题是当我单击TextBox时,ListView的SelectedItems属性不会改变,它指向最后选择的项目。当我单击图像或选择更改周围的空闲空间时。

现在我有两个问题:

  1. 是否有一种简单的方法可以解决此问题?
  2. 是否可以获取对TextBox公开其属性的集合项的引用?

1 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是将Trigger设置为在键盘焦点位于IsSelected

范围内时设置ListViewItem
<ListView ... SelectionMode="Single">
    <!-- .... -->
    <ListView.ItemContainerStyle>
        <Style TargetType="{x:Type ListViewItem}">
            <Style.Triggers>
                <Trigger Property="IsKeyboardFocusWithin" Value="True">                        
                    <Setter Property="IsSelected" Value="True"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>