ItemTemplate中带有RadioButton的ListView不会更新SelectedItem

时间:2016-10-11 07:54:35

标签: c# wpf xaml

我在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。

enter image description here

所需行为:只要单击“childitem”,就会选择ListViewItem。与设置标志时的Outlook一样,选择当前邮件。

enter image description here

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

1 个答案:

答案 0 :(得分:1)

此行为来自于IsKeyboardFocusWithin - ListViewItem的属性在这种情况下为假。当您单击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(ListViewItemListBoxItemTreeViewItem

希望这有帮助