如何在WPF中创建带有DataGrid下拉列表的ComboBox?

时间:2012-01-05 15:08:18

标签: wpf vb.net user-interface datagrid combobox

我正在尝试在WPF中使用Datagrid下拉列表装配一个ComboBox。我需要以编程方式完成代码并包含在代码隐藏中。

这是我到目前为止所得到的:

                        Dim cb As New ComboBox
                        Dim dg As New DataGrid

                        dg.AutoGenerateColumns = False

                        dg.ItemsSource = clnObjects 

                        Dim col_name As New DataGridTextColumn
                        col_name.Header = "Name"
                        col_name.Binding = New Binding("Name")
                        col_name.CanUserSort = False
                        col_name.CanUserResize = False

                        dg.Columns.Add(col_name)

                        Dim col_startdate As New DataGridTextColumn
                        col_startdate.Header = "Start Date"
                        col_startdate.Binding = New Binding("StartDate")
                        col_startdate.CanUserSort = False
                        col_startdate.CanUserResize = False

                        dg.Columns.Add(col_startdate)

                        cb.Items.Add(dg)

此代码生成一个ComboBox,其中包含一个包含两列的DataGrid,看起来很好看。虽然当您单击ComboBox并选择DataGrid中的一个行时,ComboBox中的选择无法正常工作。 (它只显示colum标题。) 我希望所选行的第一列中的值显示为ComboBox选择。

如果有人能帮助我解决这个问题,那将会非常有用。

谢谢,

麦克

1 个答案:

答案 0 :(得分:1)

听起来您希望ComboBox包含来自clnObjects的内容,但要使用DataGrid显示DropDown,而不是默认StackPanel

现在,您的ComboBox充满了DataGrid个控件,而不是clnObjects中的任何对象。这意味着当您选择一个项目时,您选择的是DataGrid,而不是DataGrid.SelectedItem

您可以尝试更改它,以便ComboBox的显示文本包含ComboBox.SelectedItem.SelectedItem,其中第一个SelectedItem是DataGrid,但我仍然认为这是一个糟糕的设计,因为您需要创建一个新的{{1每个DataGrid

的对象

相反,我建议覆盖默认的ComboBoxItem以在ComboBox.Template而不是默认的StackPanel中显示ComboBox项。可以找到默认的ComboBox模板here。只需复制它并将StackPanel替换为DataGrid到DataGrid

IsItemsHost="True"