Laden...

GridView Spalten verlieren Wert beim späteren hinzufügen/entfernen

Erstellt von Michael Schuler vor 13 Jahren Letzter Beitrag vor 13 Jahren 662 Views
M
Michael Schuler Themenstarter:in
329 Beiträge seit 2004
vor 13 Jahren
GridView Spalten verlieren Wert beim späteren hinzufügen/entfernen

Hallo zusammen

Ich habe ein Grid, welchem ich zur Laufzeit neue Spalten hinzufüge oder entferne. Diese DataGridComboBoxColumn-Spalten habe ein ItemsSource- sowie ein SelectedItem-Binding.

Das Problem ist nun, sobald ich die Spalten einmal ausgeblendet habe und danach wieder einblenden möchte, funktioniert das SelectedItem-Binding nicht mehr, die Spalten sind dann einfach leer. Ich habe das gleiche Verhalten, wenn ich die Spalten jedes Mal lösche und dann wieder neu erstelle und hinzufüge.

So erstelle ich meine Spalte im CodeBehind:

private static DataGridColumn GetListColumn(ListAttribute attribute, BindingBase binding) {
    string path = string.Format(
        CultureInfo.InvariantCulture,
        "AttributeValues.Attributes[{0}].ListItems",
        attribute.ID);

    var sourceBinding = new Binding {
        Path = new PropertyPath(path)
    };

    var column = new DataGridComboBoxColumn();
    var style = new Style(typeof(ComboBox));
    style.Setters.Add(new Setter(ItemsControl.ItemsSourceProperty, sourceBinding));
    column.ElementStyle = style;
    column.EditingElementStyle = style;
    column.SelectedItemBinding = binding;
    column.DisplayMemberPath = "Name";

    return column;
}

Und so lösche oder erstelle ich die Spalten:

private void UpdateColumns() {
    foreach (var attributeColumn in _attributeColumns) {
        GridItems.Columns.Remove(attributeColumn);
    }
    _attributeColumns.Clear();

    if (ViewModel.EditorType == SectionEditorType.Attribute) {
        var builder = new AttributeColumnBuilder();
        var attributes = ((PartsSubViewModel)ViewModel).SectionPartAttributes;

        foreach (var column in builder.GetColumns(attributes)) {
            _attributeColumns.Add(column);
            GridItems.Columns.Add(column);
        }
    }
}

Damit man sich das besser vorstellen kann, habe ich ein Bild angehängt.
Die Spalte, die noch Werte anzeigt, ist eine die im XAML definiert und daher nicht betroffen ist.

Danke für jede Hilfe,
LG Michael