如何在WPF ListView中每行显示不同的控件类型

如何在WPF ListView中每行显示不同的控件类型,wpf,listview,Wpf,Listview,我正在WPF中重新编写.Net WinForm应用程序 我需要复制一个有3列的ListView控件 第一列只是文本 第二列可以是图像,也可以是 按钮,或为空 第三列可以包含文本框、组合框、, DateTimePicker、NumericUpDown或复选框 此列表视图根据上面选择的内容刷新其内容(包括控件类型) 不幸的是,我是WPF的新手。我一直在研究WPF ListView和绑定过程。但我的直觉反应是,这不是一个有约束力的情景(尽管我很高兴被证明是错误的) 所以我的问题是WPF List

我正在WPF中重新编写.Net WinForm应用程序

我需要复制一个有3列的ListView控件

  • 第一列只是文本
  • 第二列可以是图像,也可以是 按钮,或为空
  • 第三列可以包含文本框、组合框、, DateTimePicker、NumericUpDown或复选框
此列表视图根据上面选择的内容刷新其内容(包括控件类型)

不幸的是,我是WPF的新手。我一直在研究WPF ListView和绑定过程。但我的直觉反应是,这不是一个有约束力的情景(尽管我很高兴被证明是错误的)

所以我的问题是WPF ListView是否可以每行显示不同的控件类型?如果是,怎么做


非常感谢,马特。

看看
GridView
DataGrid
。您需要手动指定列类型,而不是依赖自动生成的列

    <ListView.View>
            <GridView AllowsColumnReorder="False" x:Name="gvWFbatches">
                <GridViewColumn Width="Auto">
                    <GridViewColumnHeader Content="Batch"/>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock TextWrapping="NoWrap"  Text="{Binding Path=BatchName, Mode=OneWay}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="Auto">
                    <GridViewColumnHeader Content="QC"/>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox  IsChecked="{Binding Path=IncQC, Mode=OneWay}"  IsHitTestVisible="False" Focusable="False"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

也许对某人有用

我认为在这种情况下可以使用DataTemplateSelector。您应该定义自己的选择器
继承自类DataTemplateSelector,并将基于该项使用哪个模板的逻辑放在那里。然后将其设置为ListView的ItemTemplateSelecto


可以从中读取有关DataTemplateSelector的详细信息。您可以为每列使用不同的DataTemplate来显示所需的数据。使用这些列定义,第一列中的所有行将显示
TextBlock
,第二列中的所有行将显示
复选框。OP的问题指出,在他或她的
列表视图中,不同的行需要在一列中有不同的控件,这一点没有通过此答案解决。“取决于上面选择的内容”不清楚,OP在2年多的时间里没有任何评论或问题。