带有 checkListBox 下拉列表的 WPF 数据网格

WPF datagrid with checkListBox drop down

我对 WPF 开发还很陌生。我想创建一个包含以下列的 WPF 数据网格:复选框列、文本列、按钮列、清单框下拉列和组合框下拉列。我还需要将侦听器添加到清单框下拉列中。我使用 Infragistics Ultragrid 在 winforms 中创建了相同的内容。看起来像这样:

我阅读了有关使用 DataGridTemplateColumn 向 wpf 中的数据网格添加一些自定义控件的内容,但我不确定如何实现它。 Template 可以接受 Combobox 和 Checklistbox 吗?一个简短的代码示例会很棒。我是否必须使用 infragistics 或者这 UI 可以使用 WPF 标准控件来实现吗?

如有任何帮助,我们将不胜感激。

您可以使用标准 WPF 控件完成此操作。这是 WPF 最重要的部分之一——它非常灵活(通常不需要太多努力)。这是一个应该让您指向正确方向的示例:

<DataGrid AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridCheckBoxColumn Header="Selected"/>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Button Content="Click Me!" 
                                        Command="{Binding myItemCommand}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTextColumn Header="Task" 
                                        Binding="{Binding TaskText}"/>
                    <DataGridTextColumn Header="Resources" 
                                        Binding="{Binding ResourcesText}"/>
                    <DataGridComboBoxColumn ItemsSource="{Binding AvailableStatuses}" 
                                            SelectedItemBinding="{Binding SelectedStatus}" 
                                            Header="Status" />
                </DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
    <DataTemplate>
        <DataGrid ItemsSource="{Binding Resources}">
            <DataGrid.Columns>
                <DataGridCheckBoxColumn Binding="{Binding IsResourceUsed}"/>
                <DataGridTextColumn Binding="{Binding ResourceName}"/>
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>
</DataGrid.RowDetailsTemplate>

如上所示进入标签内部后,您可以在其中放置几乎所有您想要的控件,并且它们将在每一行中重复出现。每个项目的绑定都与该行代表的任何对象相关联,因此如果您有 DataGrid 正在显示的任务对象列表,则该列表中的每个任务都应该具有要绑定到 TaskText、ResourcesText 等的属性

编辑:更新了代码片段以显示 RowDetailsTemplate。如果一个 RowDetailsTemplate 里面有类似另一个 DataGrid 的东西不能完成工作,你总是可以写你自己的 multi-select 组合框,但它可能相当复杂,因为默认的组合框没有好的方法我知道允许您 select 多个项目。