簡體   English   中英

WPF DataGrid SelectedItem綁定在項目更改后停止工作

[英]WPF DataGrid SelectedItem binding stops working after item change

我的問題/情況非常類似於Wpf DataGrid SelectedItem在單元格編輯后失去綁定但我沒有使用任何“自定義”WPF框架。 我有一個實現INotifyPropertyChangedIEditableObject的模型,以及一個綁定到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,一切似乎都正常工作......用戶的“選定行”正在被發送到VM而沒有發生任何事故。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM