Die Bindung von WPF DataGrid SelectedItem funktioniert nach einer Elementänderung nicht mehr

Mein Problem / meine Situation ist sehr ähnlichWpf DataGrid SelectedItem verliert nach der Zellbearbeitung die Bindung Ich verwende jedoch kein "benutzerdefiniertes" WPF-Framework. Ich habe ein Modell, das implementiertINotifyPropertyChanged undIEditableObjectund ein Gitter, das an ein. gebunden istObservableCollection<T>. Das Gitter istSelectedItem Eigenschaft ist an eine Eigenschaft auf der VM gebunden.

Mit einem Haltepunkt kann ich meinen sehenViewModel.SelectedItem Die Eigenschaften ändern sich, wenn ich verschiedene Zeilen im Raster auswähle. In dem Moment, in dem ich einen Wert in einer Zeile ändere, ändert sich jedoch dieViewModel.SelectedItem Die Eigenschaft wird nicht mehr festgelegt, wenn ich den Fokus auf die Zeilen ändere. Die im obigen Link angegebene Lösung funktioniert nicht, da ich kein benutzerdefiniertes WPF-Framework verwende, sondern nur nacktes WPF.

Irgendwelche Ideen?

// View model area
public IPurchaseorderItem SelectedItem
{
    get 
    { 
        return _selectedItem;
    }

    set
    {
        if (_selectedItem != value)
        {
            _selectedItem = value;
            SelectItemCommand.NotifyCanExecuteChanged();
            RemoveItemCommand.NotifyCanExecuteChanged();
        }
    }
}

// XAML SelectedItem binding
<views:NoBindingGroupDataGrid SelectedItem="{Binding SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  

// Special Grid to clear binding groups (read on a similarly themed SO question/answer)
internal sealed class NoBindingGroupDataGrid : DataGrid
{
    private bool _editing = false;

    protected override System.Windows.Size MeasureOverride(System.Windows.Size availableSize)
    {
        var desiredSize = base.MeasureOverride(availableSize);
        ClearBindingGroup();
        return desiredSize;
    }

    protected override void OnCellEditEnding(DataGridCellEditEndingEventArgs e)
    {
        base.OnCellEditEnding(e);

        if (!_editing)
        {
            _editing = true;

            CommitEdit(DataGridEditingUnit.Row, true);

            _editing = false;
        }
    }

    private void ClearBindingGroup()
    {
        ItemBindingGroup = null;

        foreach (var item in Items)
        {
            var row = ItemContainerGenerator.ContainerFromItem(item) as FrameworkElement;

            if (row != null)
            {
                row.BindingGroup = null;
            }
        }
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage