Search code examples
wpflistviewselectionchanged

WPF ListView SelectionChanged inside style does not work. EventSetter either


<Style x:Key="OrderGroupTemplateStyle" TargetType="{x:Type ContentControl}">
<Style.Triggers>
   <DataTrigger Binding="{Binding Path=Name.ShowDetailedInfo, UpdateSourceTrigger=PropertyChanged}" Value="False">
      <Setter Property="ContentTemplate">
         <Setter.Value>
            <DataTemplate>
               <Border BorderBrush="Gray" BorderThickness="2" CornerRadius="3" Margin="2">
                  <StackPanel Background="LightGoldenrodYellow">
                     <ContentControl Content="{Binding Path=.}" Style="{StaticResource MyRecordViewModelShortStyle}"/>
                    <ListView ItemsSource="{Binding Path=Items}" Margin="4">                                                                     
                    <ListView.ItemContainerStyle>
                       <Style TargetType="{x:Type ListViewItem}">
                          <Setter Property="HorizontalContentAlignment" Value="Stretch" />                            <Setter Property="Padding" Value="2"/>
                          <EventSetter Event="MouseDoubleClick" Handler="ItemsControl_SelectionChanged"/>
                                                        </Style>
                                                    </ListView.ItemContainerStyle>

I would like to do some job when listview selection changed. because I am using style I cannot use SelectionChanged Event on ListView. I tried to use EventSetter but there is any error while compiling the project:

The event 'MouseDoubleClick' cannot be specified on a Target tag in a Style. Use an EventSetter instead.

Can someone please help me?


Solution

  • Try creating the Style as a resource instead of declaring it inline. I don't know why it behaves differently, but it appears to make the error go away:

    <Style TargetType="{x:Type ListViewItem}" x:Key="ItemContainerStyle">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="Padding" Value="2"/>
        <EventSetter Event="MouseDoubleClick" Handler="ItemsControl_SelectionChanged"/>
    </Style>
    <Style x:Key="OrderGroupTemplateStyle" TargetType="{x:Type ContentControl}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Name.ShowDetailedInfo, UpdateSourceTrigger=PropertyChanged}" Value="False">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Border BorderBrush="Gray" BorderThickness="2" CornerRadius="3" Margin="2">
                                <StackPanel Background="LightGoldenrodYellow">
                                    <ContentControl Content="{Binding Path=.}" Style="{StaticResource MyRecordViewModelShortStyle}"/>
                                    <ListView ItemsSource="{Binding Path=Items}" Margin="4" ItemContainerStyle="{StaticResource ItemContainerStyle}"/>