我正在尝试在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选择。
如果有人能帮助我解决这个问题,那将会非常有用。
谢谢,
麦克
答案 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"