Как создать ComboBox с раскрывающимся списком DataGrid в WPF? - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь установить ComboBox с раскрывающимся списком Datagrid в WPF. Мне нужно, чтобы код был сделан программно и содержался в коде позади.

Вот что у меня так далеко:

                        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 не работает должным образом. (Это просто показывает заголовки столбца.) Я хочу, чтобы значение в первом столбце выбранной строки отображалось в качестве выбора ComboBox.

Если кто-нибудь сможет мне помочь с этим вопросом, он будет очень признателен.

Спасибо

Mike

1 Ответ

1 голос
/ 05 января 2012

Звучит так, как будто вы хотите, чтобы ваш ComboBox содержал элементы из clnObjects, но для отображения DropDown используйте DataGrid, а не значение по умолчанию StackPanel.

.полон DataGrid элементов управления, а не какой-либо объект в clnObjects.Это означает, что когда вы выбираете элемент, вы выбираете DataGrid, а не DataGrid.SelectedItem

. Вы можете попробовать изменить его, чтобы отображаемый текст ComboBox содержал ComboBox.SelectedItem.SelectedItem, где первый SelectedItem - этоDataGrid, однако я все еще чувствую, что это плохой дизайн, поскольку вам нужно создать новый DataGrid объект для ComboBoxItem

Вместо этого я бы рекомендовал перезаписать значение по умолчанию ComboBox.Template для отображения элементов ComboBox в DataGrid вместо стандартной панели StackPanel.Шаблон ComboBox по умолчанию можно найти здесь .Просто скопируйте его и замените StackPanel с IsItemsHost="True" на DataGrid

<Popup x:Name="Popup" ...>
    <Grid x:Name="DropDown" ...>
      <Border x:Name="DropDownBorder" ... />
      <ScrollViewer ...>
        <!-- Replace this with a DataGrid -->
        <StackPanel IsItemsHost="True"
                    KeyboardNavigation.DirectionalNavigation="Contained" />
      </ScrollViewer>
    </Grid>
  </Popup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...