wpf - ListView.Items在ListView中始终为null作为ListViewItem-WPF

标签 wpf listview mvvm background listviewitem

我有一个列表 View ,该 View 显示哪些驱动程序在用户界面上不可见。通过使用此列表 View ,可以使它们再次可见。该功能完美运行,但是为了使最终用户更清楚选择了哪些驱动程序,我想将listviewitem的背景色更改为黄色(例如)。如果他们再次选择此listviewitem,我想将背景色改回正常。

这是我认为的代码:

        <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...
    }

有人知道如何解决这个问题吗?谢谢 :)

最佳答案

您可以使用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);
}

关于wpf - ListView.Items在ListView中始终为null作为ListViewItem-WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20346963/

相关文章:

c# - 在 WPF 中实现暂停

wpf - 命令绑定(bind)到用户控件拖放

c# - 单元测试 wpf(禁用消息框)

c# - 绑定(bind)到第二个属性

c# - 我的双击绑定(bind)不起作用

c# - 仅显示来自实体对象的 DataGrid 中的某些列

wpf - 获取 WPF ListView 的 HeaderClick 事件

.net - 在 asp.net 3.5 中将 List<string> 绑定(bind)到 Listview

android - 关注listview的第一条记录

c# - 通过 TemplateSelector 在 DataTemplate 中进行双向数据绑定(bind)