Frage

Hey there! Hier ist meine Frage:

Ich habe ein Datagrid in WPF, und ich habe eine erste Spalte, die eine DataGridComboBoxColumn ist.

Was ich möchte, ist zu tun für diese Spalte einen Header hat auch mit einer Combobox. Die Header mit propagiert in der gesamten Spalte zu ändern

Ich kann dies visuell erledigen, aber wenn ich die Daten vorlegen, die Liste, die mit dem Datagrid gebunden ist, nicht die neuen Combobox Werte tragen.

<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>

In der ComboBox_SelectionChanged Ich habe den folgenden Code:

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;
        }

Wenn ich die Daten einreichen, lege ich die Liste, die Datacontext an das Datagrid ist; wenn I den Wert der ersten Spalte ändern, um eine Zeile zu einem Zeitpunkt, das heißt auf der Zelle mit der Combobox in jeder Reihe Adressierung, werden die Werte in die Liste in Datacontext propagiert, jedoch, wenn I den Wert der ersten Spalte durch den Header ändern es funktioniert nicht.

Kann mir jemand sagen, was ich fehle? Ich vermute, es ist die Art, wie ich jede Zeile beeinflussen, aber ich habe versucht, SelectedValue, SelectedItem und SelectedIndex ... alle ohne Erfolg.

Vielen Dank im Voraus ...

War es hilfreich?

Lösung

ich glaube, ich es gelöst haben kann ... oder zumindest verschleiert es ...

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);
            }
        }

Ich habe versucht, nur die Datacontext und Hoffnung für die Zwei-Wege-Bindung funktioniert zu ändern, aber es tat nur, wenn ich in jeder Zeile der Combobox konzentriert. Also dachte ich: „Warum nicht beides“ Wie Sie sehen können, habe ich beide gegen SelectedItem der Combobox ändern und jedes BIB Status des Geräts (der Datacontext Teil). So kann ich den gewünschten Effekt erzielen.

Allerdings glaube ich nicht, diese Lösung die beste ist und ich hoffe, noch gibt es einen Weg Ich kann dies tun, ohne ein Schuft zu sein.

sind Irgendwelche Vorschläge noch willkommen!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top