2016-01-22 108 views
0

碼結果我在我的Windows Phone 8.1應用的兩個組合框:綁定組合框在System.ArgumentOutOfRangeException

  • 一個用於公司(ComboBoxCompany)
  • 一個用於公司的員工(ComboBoxEmployees)

假設他們的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時,調試器打破。 我搜索了一下,似乎我不得不實施INotifyPropertyChangedEmployee類,這是我爲每個字段所做的,但沒有解決。 拋出的異常是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 
} 

正常工作一次初始化。 我真的不知道如何繼續。你能給我一個提示嗎?

+0

我很確定問題出現在您標記的行之前的行中。您是否使用任何索引器,例如'員工[0]'? –

+0

我應該在哪裏使用它?綁定之前? –

+0

我不想說你應該使用它。我只是想知道你是否使用了類似的東西。例外意味着你想要訪問一個不存在的數組或集合的索引 –

回答

0

我做任何操作或結合之前插入

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

解決了這個問題。似乎ComboBoxEmployees是監聽ComboBoxEmployees.SelectionChanged事件處理程序的更改。另外,我在索引和指針方面犯了錯誤。