通过代码绑定 ComboBox 结果 System.ArgumentOutOfRangeException
Binding ComboBox by code results in System.ArgumentOutOfRangeException
我的 Windows Phone 8.1 应用程序中有两个组合框:
- 公司 (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
时,调试器中断 。
我搜索了一下,似乎我必须对每个字段都执行 INotifyPropertyChanged
到 Employee
class,但没有解决任何问题。
抛出的异常是System.ArgumentOutOfRangeException
。
如果我捕获它并在控制台上显示它,调试器不会停止并且 ComboBoxEmployees 充满数据和随机错误:有时 Employees 不匹配或只是给出 null
指针。
这不是第一次运行时的Binding:启动应用时,ComboBoxCompany填的是Companies,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
}
第一次初始化工作正常。
我真的不知道如何进行。你能给我一个提示吗?
我已经通过插入
解决了这个问题
ComboBoxEmployees.SelectionChanged-=ComboBoxEmployees_SelectionChanged;
ComboBoxEmployees.ItemsSource = null;
在进行任何操作或绑定之前。似乎 ComboBoxEmployees 正在监听 ComboBoxEmployees.SelectionChanged
事件处理程序的更改。另外,我在索引和指针方面犯了错误。
我的 Windows Phone 8.1 应用程序中有两个组合框:
- 公司 (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
时,调试器中断 。
我搜索了一下,似乎我必须对每个字段都执行 INotifyPropertyChanged
到 Employee
class,但没有解决任何问题。
抛出的异常是System.ArgumentOutOfRangeException
。
如果我捕获它并在控制台上显示它,调试器不会停止并且 ComboBoxEmployees 充满数据和随机错误:有时 Employees 不匹配或只是给出 null
指针。
这不是第一次运行时的Binding:启动应用时,ComboBoxCompany填的是Companies,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
}
第一次初始化工作正常。 我真的不知道如何进行。你能给我一个提示吗?
我已经通过插入
解决了这个问题ComboBoxEmployees.SelectionChanged-=ComboBoxEmployees_SelectionChanged;
ComboBoxEmployees.ItemsSource = null;
在进行任何操作或绑定之前。似乎 ComboBoxEmployees 正在监听 ComboBoxEmployees.SelectionChanged
事件处理程序的更改。另外,我在索引和指针方面犯了错误。