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

时间:2011-08-01 15:17:21

标签: wpf listview

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

我需要重现一个包含3列的ListView控件。

  • 第一列只是文字。
  • 第二列可以是图像,a 按钮,或空。
  • 第3列可以包含TextBox,ComboBox, DateTimePicker,NumericUpDown或CheckBox!

此列表视图会刷新其内容(包括控件类型),具体取决于上面选择的内容。

ListView screenshot

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

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

非常感谢,马特。

3 个答案:

答案 0 :(得分:1)

这是一个TextBlock和CheckBox

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

答案 1 :(得分:1)

也许对某人有用。

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

可以从here

中读取有关DataTemplateSelector的详细信息

答案 2 :(得分:0)

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