【问题标题】:ListView.SelectedItems does not change when clicking a TextBox in the ItemTemplate单击 ItemTemplate 中的 TextBox 时,ListView.SelectedItems 不会更改
【发布时间】:2014-07-18 23:25:24
【问题描述】:

我有一个与 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 公开的集合项的引用?

【问题讨论】:

  • 你需要多选还是单选就够了?
  • 我正在使用单曲。
  • 关于第二个问题。您想在哪里访问此列表项?在DataTemplate 中还是在代码中?
  • 在代码中。我正在测试你的代码,但是当我第一次点击时遇到了一些问题(无论我点击哪里,它总是选择第一个项目),我试图理解为什么
  • ListView 上强制SelectionMode="Single"。我已经更新了答案

标签: c# wpf listview


【解决方案1】:

解决此问题的一种方法是在键盘焦点在ListViewItem 范围内时将Trigger 设置为IsSelected

<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>

【讨论】:

  • 如果您想在后面的代码中获取SelectedItem,那么只需将其转换为集合中的项目类型即可。
  • 哦,是的,我只是想知道是否可以直接从 TextBlock 获取引用而不是调用 SelectedItems。
  • 我问这个问题是因为我读到了here 中关于 ItemClick 事件的内容,其中 ItemClickedEventArgs 包含引用,我希望能找到类似的东西。
  • SelectedItem(s)SelectionChangedEventArgs 中的项目将属于集合项目类型。如果你有像 ListViewItem 这样的 UI 容器,或者它的任何子容器,那么你可以通过 DataContext 访问后面的项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
相关资源
最近更新 更多