列表视图删除项目索引源是在使用WPF
问题描述:
我想从删除的项目我observablecollection
列表视图删除项目索引源是在使用WPF
ObservableCollection<GetterSetter> _getterSetter = new ObservableCollection<GetterSetter>();
public ObservableCollection<GetterSetter> showList
{
get { return this._getterSetter; }
}
所以我的XAML文件是这样的,
<ListView x:Name="listView" Grid.Row="1" SelectionChanged="listView_SelectionChanged" Foreground="Black" ItemsSource="{Binding ListViewCollection}" SelectedItem="{Binding SelectedListViewItem,Mode=TwoWay}" SelectionMode="Single">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="180" DisplayMemberBinding="{Binding ShowName}"/>
</GridView>
和我在这里ShowName的getter setter方法,
private string _showName;
public String ShowName{
get { return _showName; }
set
{
if (value == _showName) return;
_showName = value;
OnPropertyChanged();
}
我想删除这样的选定项目,它给了我一个错误,
listView.Items.Remove(listView.SelectedItems[0]);
showList.RemoveAt(listView.Items.IndexOf(listView.SelectedItems[0]));
我也试过这个
var delete = SelectedListViewItem;
listView.Items.Remove(delete);
无一不给了我这个错误,
'System.InvalidOperationException' 类型的未处理的异常出现在PresentationFramework.dll
附加信息:在ItemsSource正在使用时,操作无效。改为使用ItemsControl.ItemsSource访问和修改元素。
的方式GetterSetter
是我的CS文件是我第三代码段位于何处,
public GetterSetter SelectedListViewItem
{
get { return _selectedListViewItem; }
set
{
if (Equals(value, _selectedListViewItem)) return;
_selectedListViewItem = value;
OnPropertyChanged();
}
}
答
完全一样的错误说,直接做的ItemsSource从。要做到这一点,您需要将ItemsSource设置为它的类型,然后执行删除操作。
if(SelectedListViewItem != null)
{
// EDIT: Typo in the lambda for FirstOrDefault
var delete = showList.FirstOrDefault(x => SelectedListViewItem.ShowName == x.ShowName);
if(delete != null)
{
((ObservableCollection<GetterSetter>)listView.ItemsSource).Remove(delete);
}
}
编辑:NULL怪物正在让你。
现在,它给了我“型‘System.ArgumentOutOfRangeException’未处理的异常出现在mscorlib.dll 附加信息:索引超出范围必须为非负数且小于集合的大小。”在这一行代码中,'showNameBox.Text = showList [listView.Items.IndexOf(listView.SelectedItems [0])]。ShowName;' – Louni
究竟是什么SelectedListViewItem?它在哪里定义? –
它在xaml代码中定义,你可以在第二个代码片段中看到它 – Louni