删除项目后 ObservableCollection 为空

ObservableCollection is null after remove item

美好的一天! 我尝试从 ObservableCollection 中删除所选项目,但在那之后 - 集合变为空!

private void btDelParameter_Click(object sender, RoutedEventArgs e)
    {
        var selectedItem = dgParametrs.SelectedItem as Row;

        if (selectedItem != null)
        {


            if (_viewModel.ObjectViewNodel.RowInputColl != null)
            {
                if(_viewModel.ObjectViewModel.RowInputColl.Contains(selectedItem))
                    _viewModel.ObjectViewModel.RowInputColl.Remove(selectedItem); //after that RowInputColl is null!
            }
            else _viewModel.ObjectViewModel.RowInputColl = new ObservableCollection<Row>();


        }
    }

部分XAML代码:

 <DataGrid AutoGenerateColumns="False" 
                          Name="dgParametrs"     

                              CanUserAddRows="False"
                              CanUserDeleteRows="False"
                              IsEnabled="True"
                              IsReadOnly="False"
                              SelectedItem="{Binding ObjectViewModel.RowInputColl,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                          >
 ...

对我来说很奇怪,上次运行正常。

请帮我解决这个问题!我应该怎么做,删除项目后该集合不会变为空!

谢谢!

解决方案:这是旧代码 - 因此在旧代码中需要使用 SelectedItem。 但是,现在 - 我将 SelectedItem 更改为 ItemsSource - 它有效!谢谢!:)

我对你的代码看起来有点困惑。因此,从您的 Xaml 代码中,我可以看到您已将 SelectedItem 绑定到 ObjectViewModel.RowInputColl。所以我假设它是 Item from a Collection

<DataGrid AutoGenerateColumns="False" 
                          Name="dgParametrs"
                              CanUserAddRows="False"
                              CanUserDeleteRows="False"
                              IsEnabled="True"
                              IsReadOnly="False"
                              *SelectedItem="{Binding ObjectViewModel.RowInputColl,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"*
                          >

但是现在,当我转到您的 C# 代码时。您正在尝试从绑定到 SelectedItem ObjectViewNodel.RowInputColl 的同一项目中移除。您需要绑定 ItemsSource property to the collection,然后创建一个 selected Item property in your view model 以绑定到所选项目。然后从集合中删除 SelectedItem。

var selectedItem = dgParametrs.SelectedItem as Row;

if (selectedItem != null)
{
    if (_viewModel.ObjectViewNodel.RowInputColl != null)
    {
        if(_viewModel.ObjectViewModel.RowInputColl.Contains(selectedItem))
            _viewModel.ObjectViewModel.RowInputColl.Remove(selectedItem); //after that RowInputColl is null!
    }
    else 
    {
        _viewModel.ObjectViewModel.RowInputColl = new ObservableCollection<Row>();
    }
}