A ligação de SelectedItem DataGrid do WPF pára de funcionar após a alteração do item
Meu problema / situação é muito semelhante aoWpf DataGrid SelectedItem perde a vinculação após edição de célula mas não estou usando nenhum framework "personalizado" do WPF. Eu tenho um modelo que implementaINotifyPropertyChanged
eIEditableObject
e uma grade ligada a umObservableCollection<T>
. A gradeSelectedItem
propriedade está vinculada a uma propriedade na VM.
Com um ponto de interrupção, posso ver meuViewModel.SelectedItem
alteração de propriedade ao selecionar linhas diferentes na grade. No momento em que mudo um valor em uma linha,ViewModel.SelectedItem
a propriedade não está mais definida, pois altero o foco nas linhas. A solução identificada no link acima não funciona, pois não estou usando uma estrutura WPF personalizada, apenas o WPF nu.
Alguma ideia?
// 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;
}
}
}
}