【问题标题】:ListView with RadioButton in ItemTemplate does not update SelectedItemItemTemplate 中带有 RadioButton 的 ListView 不会更新 SelectedItem
【发布时间】:2016-10-11 07:54:34
【问题描述】:

我在 ItemTemplate 中有一个带有 RadioButtons 的 Listview:

<ListView ItemsSource="{Binding }">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <RadioButton IsChecked="{Binding Choice1}" />
                <RadioButton IsChecked="{Binding Choice2}" />
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

可以选择“背景”上的当前项目。但是,如果我单击 RadioButton,则未设置 SelectedItem。

期望的行为:只要单击“子项”,就会选择 ListViewItem。与设置标志时的 Outlook 一样,当前邮件被选中。

我必须以某种方式冒泡点击事件吗?

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    这种行为源于这样一个事实,即ListViewItem 的IsKeyboardFocusWithin-Property 在这种情况下为假。当您单击 RadioButton 时,RadioButton 具有键盘焦点。

    解决方案

    像这样添加一个简单的触发器

    <Style TargetType="ListViewItem">
           <Style.Triggers>
                  <Trigger Property="IsKeyboardFocusWithin" Value="true">
                          <Setter Property="IsSelected" Value="true" />
                   </Trigger>
            </Style.Triggers>
     </Style>
    

    完整示例

    <ListView ItemsSource="{Binding }">
                <ListView.Resources>
                    <Style TargetType="ListViewItem">
                        <Style.Triggers>
                            <Trigger Property="IsKeyboardFocusWithin" Value="true">
                                <Setter Property="IsSelected" Value="true" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </ListView.Resources>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <RadioButton IsChecked="{Binding Choice1}" />
                            <RadioButton IsChecked="{Binding Choice2}" />
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
    

    注意

    确保选择正确的 TargetType(ListViewItem、ListBoxItem 或 TreeViewItem)

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多