我的问题/情况非常类似于Wpf DataGrid SelectedItem 在单元格编辑后失去绑定但我没有使用任何“自定义”WPF 框架。我有一个实现的模型INotifyPropertyChanged
and IEditableObject
,以及绑定到的网格ObservableCollection<T>
。网格的SelectedItem
属性绑定到 VM 上的属性。
通过断点,我可以看到我的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;
}
}
}
}
显然,DataGrid 上的 SelectedItem 依赖属性已损坏并且未正确使用。使用 OnPropertyChanged 进行一些调试后,我发现网格实际上可靠地设置了“CurrentItem”属性。我改为使用 CurrentItem,一切似乎都正常工作...用户的“选定行”正在毫无意外地发送到虚拟机。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)