我在这里看过类似的问题,但找不到适合我的错误(有效)。我的代码是:
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
会返回list
个item
个。错误标记在ItemSource
分配行的末尾。我已经尝试将分配线移动到代码中的大多数其他位置,并且它永远不会运行
我做错了什么?
答案 0 :(得分:1)
我会这样做:
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);
}
}
}
...只要基于你的代码。你应该准备一个视图模型并使用绑定。
答案 1 :(得分:0)
上面的代码有一个范围错误,因为您正在重新定义一个与您的类中的字段同名的局部变量。实际上,您正在获取数据,然后通过添加看似空的字段来忽略它,因此我认为这个问题。
答案 2 :(得分:0)
您应该仔细了解错误消息的含义。
错误:在使用ItemsSource之前,项集合必须为空 列表框
这意味着在向ItemsSource分配内容之前,ListBox不得包含任何项目。
重现此问题的步骤:
如何避免此错误:
使用Items Collection或ItemsSource,但不能同时使用。