错误:在“列表框”中使用ItemsSource之前,项集合必须为空

本文关键字:之前 ItemsSource 集合 列表 列表框 错误 | 更新日期: 2023-09-27 18:16:41

我在这里看过类似的问题,但找不到一个适合我的错误(有效)。我的代码是:

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对象只是一个拥有4个属性的DTO。loaders.category_loader返回item s的list。错误标记在ItemSource赋值行末尾。我试过将赋值行移动到代码中的大多数其他地方,但它永远不会运行。
我做错了什么?

错误:在“列表框”中使用ItemsSource之前,项集合必须为空

我会这样做:

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

…只要基于你的代码。无论如何,您应该准备一个视图模型并使用绑定。

上面的代码有一个作用域错误,因为您正在重新定义与类中的字段同名的局部变量。实际上,您正在获取数据,然后通过添加似乎为空的字段来忽略它,因此我认为这是问题。

您应该仔细理解错误信息的含义。

错误:在使用ItemsSource之前,Items集合必须为空列表框

这意味着在你给ItemsSource赋值之前,你的ListBox不能包含任何项。

重现此问题的步骤:

  1. 使用一个组合框,并直接在XAML代码中添加一些项目。
  2. 然后在代码后面设置它的itemssource属性。
  3. 你会得到这个异常。

如何避免此错误:

使用Items Collection或ItemsSource,但不能同时使用。