Удалить все элементы из listobox - PullRequest
1 голос
/ 11 июня 2011

Привет, я пытаюсь удалить все элементы из списка: это мой простой список:

 <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 ]

6 голосов
/ 11 июня 2011

Невозможно очистить коллекцию Items, если указать ее как Binding. Вы должны очистить связанную коллекцию вместо этого. Не забывайте, что ваша исходная коллекция должна реализовывать INotifyCollectionChanged

1 голос
/ 11 июня 2011

Вы должны сделать привязку, используя 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...