2016-10-18 4 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> 

Дело в том, что, когда я нажимаю на эту кнопку, я хочу знать SelectedItem в ListBox, который связан в моем ViewModel. Этот выбор не запускается, если я не выбираю элемент первым.

Любые идеи?

+0

CommandParameter = "{Binding SelectedItem, RelativeSource = {RelativeSource Mode = FindAncestor, AncestorType = lists: MyControl} "не работает? –

+0

Это будет работать только в том случае, если в списке будут выбраны какие-либо элементы, что здесь не так. –

+0

Вы имеете в виду, что вы не можете определить, когда выбранный вами элемент Null? –

ответ

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>