Error: Items collection must be empty before using ItemsSource in Listbox
Error: Items collection must be empty before using ItemsSource in 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
对象只是一个包含 4 个属性的 DTO。 loaders.category_loader
returns list
个 item
。错误标记在 ItemSource
赋值行的末尾。我已经尝试将分配行移动到代码中的大多数其他位置,但它从未运行过。
我做错了什么?
您上面的代码存在范围界定错误,因为您正在重新定义一个与 class 中的字段同名的局部变量。实际上,您正在获取数据,然后通过添加看起来为空的字段来忽略它,这就是我认为的问题。
我会这样做:
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);
}
}
}
...只要基于您的代码。你应该准备一个视图模型并使用绑定。
您应该仔细理解错误信息的含义。
Error: Items collection must be empty before using ItemsSource in
Listbox
这意味着在将某些内容分配给 ItemsSource 之前,您的 ListBox 不得包含任何项目。
重现此问题的步骤:
- 使用组合框并直接在 XAML 代码中添加一些项目。
- 然后在代码隐藏中设置它的项目源属性。
- 你会得到这个异常。
如何避免此错误:
使用 Items Collection 或 ItemsSource,但不能同时使用两者。
我在这里查看了与此类似的问题,但找不到符合我的错误(有效)的问题。我的代码是:
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
returns list
个 item
。错误标记在 ItemSource
赋值行的末尾。我已经尝试将分配行移动到代码中的大多数其他位置,但它从未运行过。
我做错了什么?
您上面的代码存在范围界定错误,因为您正在重新定义一个与 class 中的字段同名的局部变量。实际上,您正在获取数据,然后通过添加看起来为空的字段来忽略它,这就是我认为的问题。
我会这样做:
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);
}
}
}
...只要基于您的代码。你应该准备一个视图模型并使用绑定。
您应该仔细理解错误信息的含义。
Error: Items collection must be empty before using ItemsSource in Listbox
这意味着在将某些内容分配给 ItemsSource 之前,您的 ListBox 不得包含任何项目。
重现此问题的步骤:
- 使用组合框并直接在 XAML 代码中添加一些项目。
- 然后在代码隐藏中设置它的项目源属性。
- 你会得到这个异常。
如何避免此错误:
使用 Items Collection 或 ItemsSource,但不能同时使用两者。