2009-07-28 5 views
1

Эй, там! Вот мой вопрос:WPF DataGrid ComboBox Column: Распространение заголовка Combobox во всей колонке

У меня есть Datagrid в WPF, и у меня есть первый столбец, который является DataGridComboBoxColumn.

Что я хотел бы сделать, так это иметь заголовок для этого столбца также с помощью combobox: изменение заголовка с распространением по всему столбцу.

Я могу сделать это визуально, но когда я отправляю данные, список, связанный с Datagrid, не несет новых значений combobox.

<dg:DataGridComboBoxColumn SelectedItemBinding="{Binding BIBStatus}"            
          ItemsSource="{Binding Source={StaticResource typeStatus}}" 
          Width="0.20*"> 
        <dg:DataGridComboBoxColumn.HeaderTemplate> 
         <DataTemplate> 
          <StackPanel> 
           <TextBlock Text="Built-In Bridge"/> 
           <ComboBox SelectedItem="{Binding BIBStatus}" 
              SelectionChanged="ComboBox_SelectionChanged" 
              ItemsSource="{Binding Source={StaticResource typeStatus}}"/> 
          </StackPanel>         
         </DataTemplate> 
        </dg:DataGridComboBoxColumn.HeaderTemplate> 
       </dg:DataGridComboBoxColumn> 

В ComboBox_SelectionChanged у меня есть следующий код:

DataGridColumn comboCol = this.gridResults.Columns[0]; 

     for (int i = 0; i < this.gridResults.Items.Count; i++) 
     { 
      ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox); 

      myCmBox.SelectedValue = ((ComboBox)sender).SelectedValue; 
     } 

Когда я отправить данные, я представить список, который DataContext в Datagrid; если я изменяю значение первого столбца, адресующего строку за раз, то есть, щелкнув ячейку со списком в каждой строке, значения будут переданы в список в DataContext, однако, если я изменил значение первого столбца на заголовок Это не.

Может ли кто-нибудь сказать мне, что мне не хватает? Я предполагаю, что это так, как я влияю на каждую строку, но я пробовал SelectedValue, SelectedItem и SelectedIndex ... все безрезультатно.

Заранее спасибо ...

+0

Поскольку вы выполняете двухстороннюю привязку данных, изменение источника данных должно изменить выбранный вами элемент combobox. Что происходит, когда вы напрямую устанавливаете BIBStatus? –

+0

Я подумал об этом :), но проблема в том, что он только обновляет выпадающие списки каждой строки, когда я нажимаю на нее для редактирования ... в противном случае каждая строка остается неизменной. Я предполагаю, что проблема может заключаться в запуске события SelectionChanged в combobox каждой строки, поскольку привязка данных работает, когда я выбираю значение в каждой строке. Когда я редактирую значения comboboxes в коде позади, это событие SelectionChanged не запускается, потому что это не происходит в пользовательском интерфейсе ... любые догадки? – LostKaleb

ответ

0

Я думаю, что, возможно, решить ее ... или, по крайней мере, под видом его ...

DataGridColumn comboCol = this.gridResults.Columns[0]; 

     for (int i = 0; i < this.gridResults.Items.Count; i++) 
     { 
      ComboBox myCmBox = (comboCol.GetCellContent(this.gridResults.Items[i]) as ComboBox); 
      myCmBox.SelectedItem = ((ComboBox)sender).SelectedItem; 
     } 

     if (this._results != null) 
     { 
      foreach (Device device in _results) 
      { 
       device.BIBStatus = (TypeStatus)Enum.ToObject(typeof(TypeStatus), ((ComboBox)sender).SelectedValue); 
      } 
     } 

Я попытался изменить только DataContext и надеяться на двухсторонняя привязка к работе, но это было сделано только тогда, когда я сосредоточился на combobox каждой строки. Поэтому я подумал: «Почему не в обоих направлениях?» Как вы можете видеть, я изменяю оба выбранных элемента combobox и состояние BIB каждого устройства (часть datacontext). Таким образом, я получаю желаемый эффект.

Однако я не думаю, что это решение является лучшим, и я все еще надеюсь, что я смогу сделать это, не будучи негодяем.

Любые предложения по-прежнему приветствуются!

 Смежные вопросы

  • Нет связанных вопросов^_^