Столбец ComboBox сетки данных WPF:Распространение списка со списком заголовков по всему столбцу

StackOverflow https://stackoverflow.com/questions/1195471

Вопрос

Привет всем!Вот мой вопрос:

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

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

Я могу сделать это визуально, но когда я отправляю данные, список, связанный с 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...все безрезультатно.

Заранее благодарю...

Это было полезно?

Решение

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

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 и надеялся, что двусторонняя привязка сработает, но это сработало только тогда, когда я сосредоточился на выпадающем списке каждой строки.Вот я и подумал:"почему не в обоих направлениях?" Как вы можете видеть, я изменяю как selecteditem каждого combobox'а, так и статус BIB каждого устройства (часть datacontext).Таким образом, я получаю желаемый эффект.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top