WPF DataGrid Привязка SelectedItem перестает работать после изменения элемента
Моя проблема / ситуация очень похожа наWpf DataGrid SelectedItem теряет привязку после редактирования ячейки но я не использую какие-либо "пользовательские" рамки WPF. У меня есть модель, которая реализуетINotifyPropertyChanged
а такжеIEditableObject
и сетка привязана кObservableCollection<T>
, СеткаSelectedItem
свойство связано со свойством на виртуальной машине.
С точкой останова я вижуViewModel.SelectedItem
изменение свойства, поскольку я выбираю разные строки в сетке. Однако в тот момент, когда я изменяю значение в строке,ViewModel.SelectedItem
свойство больше не устанавливается, так как я меняю фокус на строках. Решение, указанное в приведенной выше ссылке, не работает, так как я не использую пользовательскую платформу WPF, просто голый WPF.
Есть идеи?
// 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;
}
}
}
}