2010-10-27 59 views
3

帶有ItemTemplate的ListBox:SelectionChanged未被觸發 出現了什麼問題?帶有ItemTemplate的ListBox:SelectionChanged未被觸發

<ListBox ItemsSource="{Binding Source1}" SelectionChanged="ListBox_SelectionChanged" SelectedItem="{Binding CurrentItem, Mode=TwoWay}" HorizontalAlignment="Stretch" Margin="0" Padding="0"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid Margin="0"> 

       <Grid.RowDefinitions> 
        <RowDefinition /> 
        <RowDefinition Height="1" /> 
       </Grid.RowDefinitions> 

       <Button Grid.Row="0" BorderThickness="0" Background="Transparent" HorizontalAlignment="Stretch"> 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="Click"> 
          <cmd:EventToCommand Command="{Binding FirstCommand}" PassEventArgsToCommand="True" /> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
        <Button.Template> 
         <ControlTemplate> 
          <Grid HorizontalAlignment="Stretch"> 

           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="*"/> 
            <ColumnDefinition Width="65" /> 
            <ColumnDefinition Width="30"/> 
           </Grid.ColumnDefinitions> 

           <TextBlock Grid.Row="0" Grid.Column="0" Text="{Binding Title}" Style="{StaticResource ListBoxTextStyle}" /> 
           <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title1}" Margin="5,0" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center" /> 

          </Grid> 
         </ControlTemplate> 
        </Button.Template> 
       </Button> 

       <Border Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" BorderBrush="#FFFFFF" HorizontalAlignment="Stretch" BorderThickness="0,1,0,0" /> 

      </Grid> 

     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 

</ListBox> 

回答

3

ListBox獲得的點擊事件的ListBoxItem將成爲選擇。但模板內的按鈕將接收並處理單擊事件。因此ListBox沒有看到該事件。

由於您在視圖模型上調用了一個命令,因此請考慮讓視圖模型將當前項目設置爲選定項目。

+0

有沒有其他解決方案?你的意思是說,我需要發送消息給父ViewModel來設置SelectedItem? – SuperXMan 2010-10-27 13:06:51

+0

是的,這就是我的意思。你使用'EventCommand'使我得出結論,你寧願不把代碼放在你的視圖中。沒有其他的解決方案可以避免編寫更多的代碼,並且讓代碼更好的放在ViewModel中而不是View中。 – AnthonyWJones 2010-10-28 10:29:04