Грешка: Колекцията от елементи трябва да е празна, преди да използвате ItemsSource в Listbox

Разгледах подобни въпроси на този тук, но не можах да намеря такъв, който отговаря на моята грешка (който работи). Моят код е:

public MainWindow()
    {
        InitializeComponent();
    }

    public List<item> loadedCategory = new List<item>();

    private void Open_Click(object sender, RoutedEventArgs e)
    {
        OpenFileDialog openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() == true)
        {
            List<item> loadedCategory = loaders.category_loader(openFileDialog.FileName);
        }

        left_panel_lower_list.ItemsSource = loadedCategory;
    }

обектът item е просто DTO, който съдържа 4 свойства. loaders.category_loader връща list от items. Грешката е маркирана в края на реда за присвояване ItemSource. Опитах се да преместя реда за присвояване на повечето други места в кода и той никога не се изпълнява.
Какво правя грешно?


person Lex Hammerwood    schedule 06.10.2015    source източник


Отговори (3)


Бих направил така:

private ObservableCollection<item> loadedCategory = new ObservableCollection<item>();

public MainWindow()
{
    InitializeComponent();
    left_panel_lower_list.ItemsSource = loadedCategory;
}

private void Open_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    if (openFileDialog.ShowDialog() == true)
    {
        foreach(var item in loaders.category_loader(openFileDialog.FileName)
        {
            loadedCategory.Add(item);
        }
    }        
}

...стига да се базира на вашия код. Все пак трябва да подготвите модел на изглед и да използвате обвързване.

person dytori    schedule 07.10.2015

Вашият код по-горе има грешка в обхвата, тъй като предефинирате локална променлива със същото име като полето във вашия клас. Ефективно получавате данните и след това ги игнорирате, като добавяте полето, което изглежда празно, което според мен е проблемът.

person netniV    schedule 06.10.2015

Трябва внимателно да разберете значението на съобщението за грешка.

Грешка: Колекцията от елементи трябва да е празна, преди да използвате ItemsSource в Listbox

Това означава, че вашият ListBox не трябва да съдържа никакъв елемент, преди да присвоите нещо на ItemsSource.

Стъпки за възпроизвеждане на този проблем:

  1. Използвайте комбинирано поле и добавете някои елементи към него директно в XAML код.
  2. След това в кода зад набора това е свойството itemssource.
  3. Ще получите това изключение.

Как да избегнете тази грешка:

Използвайте или Items Collection, или ItemsSource, но не и двете.

person AnjumSKhan    schedule 07.10.2015