删除项后,ObservableCollection为null

时间:2015-03-11 06:53:23

标签: c# wpf datagrid observablecollection

美好的一天! 我尝试从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-并且它可以工作!谢谢!:)

1 个答案:

答案 0 :(得分:2)

我对你的代码看起来有点困惑。因此,从您的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>();
    }
}