您好我尝试从列表框中删除所有元素: 这是我的简单列表框:
<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}" Name="listbox" >
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,0,0,17" >
<!--Replace rectangle with image-->
<Image Source="{Binding Img}" />
<StackPanel Width="311">
<TextBlock Text="{Binding Pos}"
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
但是当我尝试删除列表框的所有元素时,错误是:
A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.dll
System.InvalidOperationException: Operation not supported on read-only collection.
at System.Windows.Controls.ItemCollection.ClearImpl()
at System.Windows.PresentationFrameworkCollection`1.Clear()
at aaaaa.MainPage.Button_Click(Object sender, RoutedEventArgs e)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)
private void Button_Click(object sender, RoutedEventArgs e)
{
try
{
listbox.Items.Clear();
}
catch (Exception ss) {
Debug.WriteLine(ss.ToString());
}
}
感谢!
答案 0 :(得分:6)
如果您将Items
指定为Binding
,则无法清除它。您应该清除绑定集合。不要忘记您的源集合应该实现INotifyCollectionChanged
答案 1 :(得分:1)
您应该使用ObservableCollection
进行绑定// this should be level member instance or something like that just to keep a reference to it.
ObservableCollection<YourClass> itemsSource = new ObservableCollection<YourClass>();
// ... Fill you items collection
listBox.ItemsSource = itemsSource;
// if you need to clear your list, just use this code
itemsSouce.Clear();