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