【问题标题】:WPF datagrid with checkListBox drop down带有 checkListBox 下拉菜单的 WPF 数据网格
【发布时间】:2015-05-18 15:35:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# wpf xaml datagrid ultrawingrid


    【解决方案1】:

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

    编辑:更新了代码 sn-p 以显示 RowDetailsTemplate。如果其中包含另一个 DataGrid 之类的 RowDetailsTemplate 无法完成工作,您始终可以编写自己的多选组合框,但它可能相当复杂,因为默认的组合框没有我知道的好方法允许您选择多个项目。

    【讨论】:

    • 看起来 OP 想要一个用于资源的 MV 组合框。但这可以解决并插入 DataGridTemplateColumn。普拉斯你应该在一个单独的问题中询问 MV 组合框。
    • 泰勒:谢谢你的回答。这让我开始,但 Resources 列不是 text 。它必须是带有复选框的下拉菜单。布拉姆:你说得对。虽然我不确定 MV 组合框是否会设置该复选框 UI。它很可能是一个带有多选选项的组合框。无论如何我可以在资源列中添加一个复选框?
    • 废话! WPF 中没有 checkListBox 控件:'(
    • 对不起,我错过了 checkListBox 部分。几个想法:您可以使用 RowDetailsTemplate 并在其中放置一个 ItemsControl,这样当您单击该行时,您会看到所有资源的列表,旁边有复选框。您仍然可以将所有这些解析为一个字符串,以显示在 ViewModel 的 ResourcesString 列中。另一个想法是 TemplateColumn 中的某种自定义控件,它会弹出并为您提供所需的选项,但这需要更多的工作才能看起来正确。
    • 好的。非常感谢泰勒。您能否提供有关行详细信息方法的简短代码示例?以接近勺子喂食为代价。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多