删除项目后 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>();
}
}
美好的一天! 我尝试从 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>();
}
}