2016-10-18 65 views
0

我有一個列表框ItemContainerStyle,它描述了列表框中每個元素的樣式。像看起來是這樣的:Listbox.ItemContainerStyle selected item

<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem" BasedOn="{StaticResource MyStyle}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Border BorderThickness="0,0,0,1" BorderBrush="#1f000000" Padding="16 8"> 
         <Button Command={Binding MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=lists:MyControl}}}" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 

的事情是,當我點擊這個按鈕,我想知道在列表框中,這是在我的ViewModel綁定的SelectedItem。除非我先選擇該項目,否則此選擇不會觸發。

任何想法?

+0

CommandParameter =「{結合的SelectedItem,的RelativeSource = {的RelativeSource模式= FindAncestor,AncestorType =列表:MyControl}「不起作用? –

+0

只有在列表框中選擇了任何項目時纔會有效,但這裏不是這種情況。 –

+0

您的意思是說,當您選擇的項目爲空時,您無法檢測到? –

回答

3

您需要強制IsSelected與觸發器:

<Style.Triggers> 
     <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
       <Setter Property="IsSelected" Value="True"/> 
     </Trigger> 
</Style.Triggers> 

這是一個完整的工作示例:

<ListBox x:Name="ListBox" ItemsSource="{Binding SomeList}" SelectedItem="{Binding SelectedListElement, Mode=TwoWay}" IsSynchronizedWithCurrentItem="True" > 
    <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem" > 
       <Style.Triggers> 
        <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
         <Setter Property="IsSelected" Value="True"/> 
        </Trigger> 
       </Style.Triggers> 
       <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate> 
         <Border BorderThickness="0,0,0,1" BorderBrush="#1f000000" Padding="16 8"> 
           <Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBox}}, 
           Path=DataContext.Run}" CommandParameter="{Binding}" Height="30" Width="100"/> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
相關問題