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

时间:2015-05-18 15:35:18

标签: c# wpf xaml datagrid ultragrid

我是WPF开发的新手。我想创建一个包含以下列的WPF数据网格:CheckBox列,文本列,按钮列,核对表框下拉列和组合框下拉列。我还需要在清单框下拉列中添加监听器。我使用Infragistics Ultragrid在winforms中创建了相同的内容。它看起来像这样:

我读到了使用DataGridTemplateColumn在wpf中向datagrid添加一些自定义控件,但我不确定如何实现它。模板可以采用Combobox和Checklistbox吗?一个简短的代码示例会很棒。我是否必须使用infragistics或者是否可以使用WPF标准控件实现此UI?

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以使用标准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等绑定的属性。 p>

编辑:更新了代码段以显示RowDetailsTemplate。如果RowDetailsTemplate与其中的其他DataGrid之类的东西没有完成任务,你总是可以编写自己的多选组合框,但它可能相当复杂,因为默认方法没有我知道的好方法允许您选择多个项目。