【问题标题】:ListView.Items are always null as ListViewItem in a ListView - WPFListView.Items 始终为 null 作为 ListView 中的 ListViewItem - WPF
【发布时间】:2013-12-03 09:11:12
【问题描述】:

我有一个列表视图,它显示了哪些驱动程序在用户界面上不可见。使用此列表视图可以使它们再次可见。该功能完美运行,但为了让最终用户清楚选择了哪些驱动程序,我想将 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...
    }

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

【问题讨论】:

  • 您的问题究竟是什么驱动类型的项目?某些东西没有按预期工作吗?为什么需要它是 ListViewItems?
  • 更改所选ListViewItems的背景颜色。无法在我的项目中为 Driver 类型的对象分配背景。

标签: wpf listview mvvm background listviewitem


【解决方案1】:

您可以使用ItemContainerGenerator.ContainerFromItem 方法从您的Driver 对象生成ListViewItem

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

【讨论】:

  • 谢谢,接受这个作为答案。正是我需要的。对于可能阅读此内容的人。您仍然必须解析为 ListViewItem。 var lstViewItem = listView.ItemContainerGenerator.ContainerFromItem(selectedDriver) as ListViewItem;
  • 感谢您回来注意这一点...我会相应地更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多