2013-12-03 2 views
1

У меня есть listview, который показывает, какие драйверы не отображаются в пользовательском интерфейсе. С помощью этого списка можно сделать их видимыми снова. Функциональность работает отлично, но для того, чтобы дать конечному пользователю некоторую ясность, какие драйверы выбраны, я хочу изменить фоновый цвет listviewitem на желтый (например). Если они снова выберут этот listviewitem, я хочу изменить фоновый цвет на нормальный.ListView.Items всегда null как ListViewItem в ListView - WPF

Это код, на мой взгляд:

 <ListView Margin="10,10,10,10" x:Name="lstViewCollapsedDrivers" ItemsSource="{Binding CollapsedDrivers}" Grid.Row="1" Grid.Column="2" 
        ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionChanged="LstViewCollapsedDrivers_OnSelectionChanged"> 

      <i:Interaction.Triggers> 
       <i:EventTrigger SourceName="lstViewCollapsedDrivers" EventName="MouseUp"> 
        <i:InvokeCommandAction Command="{Binding SelectCollapsedDriverCommand}" CommandParameter="{Binding ElementName=lstViewCollapsedDrivers, Path=SelectedItem}"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 

      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Height" Value="50"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding Path=RowSelected}" Value="True"> 
          <Setter Property="Background" Value="Yellow"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </ListView.ItemContainerStyle> 

      <ListView.View> 
       <GridView> 
        <GridViewColumn DisplayMemberBinding="{Binding Name}"> 
         <GridViewColumnHeader Style="{StaticResource gridViewColumnHeaderStyle}" Content="Name"/> 
        </GridViewColumn> 

        <GridViewColumn DisplayMemberBinding="{Binding Haulier}"> 
         <GridViewColumnHeader Style="{StaticResource gridViewColumnHeaderStyle}" Content="Haulier"/> 
        </GridViewColumn> 

        <GridViewColumn DisplayMemberBinding="{Binding Plate}"> 
         <GridViewColumnHeader Style="{StaticResource gridViewColumnHeaderStyle}" Content="Plate"/> 
        </GridViewColumn> 

        <GridViewColumn DisplayMemberBinding="{Binding Telephone}"> 
         <GridViewColumnHeader Style="{StaticResource gridViewColumnHeaderStyle}" Content="Telephone"/> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 

Проблема заключается в том, что ListView.Items теперь типа Driver вместо ListViewItem (я думаю, что этим: ItemsSource = "{Binding CollapsedDrivers}") , Я пробовал много вещей, и я никак не мог разглядеть элементы в ListViewItems.

Я также добавил некоторый код (фактически я стараюсь избегать этого, но если нет другого пути ...).

private void LstViewCollapsedDrivers_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var test = sender as ListView; 
     var lstviewItem = test.SelectedItem ; // This is of type driver... 
    } 


    private void LstViewCollapsedDrivers_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var test = sender as ListView; 
     var lstviewItem = test.SelectedItem as ListViewItem; // This is null... 
    } 

Кто-нибудь знает, как это исправить? Спасибо :)

+0

Что именно * * является ваша проблема с деталями того типа драйвера? Что-то работает не так, как ожидалось? Зачем вам нужен ListViewItems? – nvoigt

+0

Изменение цвета фона для выбранных ListViewItems. Невозможно назначить фон объекту типа Driver в моем проекте. –

ответ

2

Вы можете использовать метод ItemContainerGenerator.ContainerFromItem для создания ListViewItem из вашего Driver объекта:

private void OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ListView listView = sender as ListView; 
    Driver selectedDriver = listView.SelectedItem ; 
    ListViewItem item = (ListViewItem) 
     listView.ItemContainerGenerator.ContainerFromItem(selectedDriver); 
} 
+0

Спасибо, принял это как ответ. Именно то, что мне нужно. Для людей, которые могут это прочитать. Вам все равно придется разбираться с ListViewItem. var lstViewItem = listView.ItemContainerGenerator.ContainerFromItem (selectedDriver) как ListViewItem; –

+0

Спасибо, что вернулись, чтобы отметить этот момент ... Я соответствующим образом обновлю ответ. – Sheridan

Смежные вопросы