通过代码绑定组合框会导致 System.ArgumentOutOfRangeException

本文关键字:System ArgumentOutOfRangeException 代码 绑定 组合 | 更新日期: 2023-09-27 18:31:26

我的Windows Phone 8.1应用程序中有两个组合框:

  • 一个为公司(ComboBoxCompany)
  • 一个用于公司员工(ComboBox员工)

假设他们的 XAML 是这样的。

<ComboBox Name="ComboBoxEmployees"
      SelectionChanged="ComboBoxEmployees_SelectionChanged">
   <ComboBox.ItemTemplate>
      <DataTemplate>
         <StackPanel>
            <TextBlock Text="{Binding Id}"/>
            <TextBlock Text="{Binding Person_Name}"/>                                  
         </StackPanel>
      </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>
<ComboBox Name="ComboBoxCompany"
          SelectionChanged="ComboBoxCompany_SelectionChanged">
<ComboBox.ItemTemplate>
   <DataTemplate>
      <StackPanel>
         <TextBlock Text="{Binding Company_Name}"/>                                 
      </StackPanel>
   </DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

每当我在 ComboBoxCompany 中更改公司时,它都会刷新 ComboBox1 的列表,分配并显示新的员工列表。

private void ComboBoxCompany_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
    //whenever I select the company name, it must change the employees list on the ComboBoxEmployees
        //let's save it into an ObservableCollection
    ObservableCollection <Employee> employees = new ObservableCollection<Employee>();
    //...fill employees with data...
    ComboBoxEmployees.ItemsSource = employees; //<-- Debugger breaks right here.
}

但是当分配新的ItemsSource时,调试器会中断。我搜索了一下,似乎我必须实现对Employee类的INotifyPropertyChanged,我为每个领域都做了,但没有任何解决。引发的异常是 System.ArgumentOutOfRangeException

如果我捕获它并在控制台上显示它,调试器不会停止,ComboBoxEmployees 充满了数据和随机错误:有时员工不匹配或只是给出null指针。

这不是运行时的第一个绑定:启动应用程序时,ComboBoxCompany 填充了公司,ComboBoxEmployees 填充了第一家公司的员工:它发生在另一种方法中,但使用的指令是相同的:

public MainPage() {
   InitializeComponent();
   SetPage();
}
private void SetPage(){
   //getting companies data from DB...
   ComboBoxCompany.ItemsSource = companies;
   //lambda expression to get the Employees of a Company
   ComboBoxEmployees.ItemsSource = employees
}

第一次初始化工作正常。我真的不知道该怎么做。你能给我一个提示吗?

通过代码绑定组合框会导致 System.ArgumentOutOfRangeException

我已经通过插入解决了这个问题

ComboBoxEmployees.SelectionChanged-=ComboBoxEmployees_SelectionChanged;
ComboBoxEmployees.ItemsSource = null;

在执行任何操作或绑定之前。ComboBoxEmployees 似乎正在使用 ComboBoxEmployees.SelectionChanged 事件处理程序侦更改。此外,我在索引和指针方面犯了错误。