我的Windows Phone 8.1应用程序中有两个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列表,分配并显示一个新的Employees列表。
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
类,我为每个字段都做了,但没有解决。
抛出的异常是System.ArgumentOutOfRangeException
。
如果我抓住它并在控制台上显示它,则调试器不会停止,并且ComboBoxEmployees会填充数据和随机错误:有时员工不匹配或仅提供null
指针。
这不是运行时的第一个Binding:启动应用程序时,ComboBoxCompany充满了公司,ComboBoxEmployees充满了第一家公司的员工:它发生在另一个方法中,但使用的指令是相同的:< / p>
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)
我已经通过插入
解决了这个问题ComboBoxEmployees.SelectionChanged-=ComboBoxEmployees_SelectionChanged;
ComboBoxEmployees.ItemsSource = null;
在进行任何操作或绑定之前。似乎ComboBoxEmployees 正在监听使用ComboBoxEmployees.SelectionChanged
事件处理程序进行更改。此外,我正在使用索引和指针进行错误。