从列表框中删除所有项目

时间:2011-06-11 09:39:38

标签: c# windows-phone-7

您好我尝试从列表框中删除所有元素: 这是我的简单列表框:

 <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());
        }
    }

感谢!

2 个答案:

答案 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();